1 起因
在用 Tensorflow 携带的 Keras 跑神经网络时,我很好奇是什么软件占了那么多内存不让 Python 用。
打开 Windows 资源监视器,在内存页面看到了名为「Memory Compression」的神秘进程。
2 解释
2.1 分页
这个我相信你们都略微知道一点,只要是在买电脑的时候好奇过什么是「SSD」就大概已经明白。传统的硬盘仅执行外存工作,不参与内存。固态硬盘(SSD)可以让一部分内存使用硬盘空间,它在(物理意义上的)C 盘里的文件名是 pagefile.sys ,缓解物理内存压力。这就是分页文件。代价则是在内存条和硬盘之间传输信息比较慢,如果这些信息当中有一些需要频繁更新,就会弄巧成拙,比传统方式更卡。
2.2 内存压缩
为了减小分页的负担,微软在 Windows 10 引入了内存压缩功能。硬盘里的东西可以压缩成 zip 7z rar 等格式,内存条里的也可以压缩。将不常用的数据压缩变小,可以多一些空间给内存条自己用,不必麻烦硬盘。
2.3 然而
这个压缩空间是有一定预留的,宁愿空着也不让其他进程使用。我现在很想关掉它。
3 操作
3.1 查询
- 按 Win + R
- 输入
powershell - 按 Ctrl + Shift + Enter
- 弹出新窗口
- 输入
Get-MMAgent(大小写无关紧要) - 按 Enter
返回文字如下所示
(base) PS C:\Windows\system32> Get-MMAgent
ApplicationLaunchPrefetching : True
ApplicationPreLaunch : True
MaxOperationAPIFiles : 256
MemoryCompression : True
OperationAPI : True
PageCombining : True
PSComputerName :MemoryCompression 这一项反映了启用与否的状态。
3.2 关闭
- 按 Win + R
- 输入
tasksched.msc(代表 Task Scheduler Microsoft Console) - 按 Ctrl + Shift + Enter
- 弹出新窗口
- 在左侧目录中找到
任务计划程序库,下拉列表 - 找到
Microsoft,下拉列表 - 找到
Windows,下拉列表 - 找到
MemoryDiagnostic,单击 - 在窗口中间区域找到
ProcessMemoryDiagnosticEvents和RunFullMemoryDiagnostic,分别右键单击,点禁用。
3.3 开启
将以上步骤最后一步的禁用改成启用。
4 附录
博客园的帖子
Windows 售后咨询