![Windows 2008 R2 上的高内存使用率](https://linux22.com/image/589097/Windows%202008%20R2%20%E4%B8%8A%E7%9A%84%E9%AB%98%E5%86%85%E5%AD%98%E4%BD%BF%E7%94%A8%E7%8E%87.png)
我遇到的问题很简单:虽然应用程序使用的内存很小(约 2GB),但同时任务管理器报告服务器基本上已使用所有内存(16GB)。在此期间,它开始交换,性能下降,延迟上升。
我将其诊断为一个使用映射内存访问打开许多文件的应用程序(可能以某种不太标准的方式,因为它是用 Delphi 编写的)。Sysinternals 的 RamMap 报告说,这 14GB 用于“映射文件”,处于活动状态。问题是,这个内存不是活跃使用时,这些应用程序处于待机模式,没有连接任何客户端。尽可能地闲置。
要将内存使用率恢复到正常水平,我只需使用 RamMap 中的“Empty→Empty System Working Set”选项。这解决了只要没有新活动(从数据文件读取等)就没有可用内存的问题。然后内存使用率上升,性能再次下降。
解决方案是编写一个脚本,每隔几分钟执行 RamMap 执行的相同操作。这就是我陷入困境的地方。我找到了EmptyWorkingSet
WinAPI 函数,并找到了 PowerShell 脚本来在系统中的所有进程上运行它,但它最多只能减少 200-300MB 的内存使用量,而不是 RamMap 能够达到的几 GB。
如何定期运行 RamMap Empty System Working Set 选项?
答案1
问题是由使用应用程序引起的文件标志_随机_访问。我修复了该应用程序。
如果有人发布通用的解决方法,我会将正确答案重新分配给他的答案。