Windows 环境内存占用高不释放,目前遇到的常见情况如下:
情况一:JVM内存泄漏
这种网上的排查方式有很多,自行查阅即可
情况二:SQLserver内存配置过大
这种也是,从网上查找修改方式然后修改即可
情况三:Windows安全日志导致
今天主要讲讲这种情况的排查过程及原因。
首先是从任务管理器查看内存占用,会发现内存占用是90%,但是将详细信息的内存加起来是没有到达这个占比的。
那问题来,内存去哪了,被吃了?接下来给大家推荐一个分析工具(RAMMap64.exe)
启动工具后,我们可以看到如下现象:
第一行:Process Privabe:这个和我们任务管理器详细信息部分中的内存占用总和应该差不多,没问题
第二行:Mapped File: 这个是什么?看着着占用有点高呀! 先问问AI
重点:Mapped File 是加到内存中的!
那么好,接下来再通过RAMMap64看看,Mapped File都是些什么(下面这个截图是要点到工具的Physical Pages 才能看到哈):
可以看到Mapped File对应的好多文件都是windows下的security文件,应该和操作系统安全相关。
从事件查看器中查看安全属性:
破案了,可以看到,这个文件竟然设置了9个多G,这加载到内存里,能不高嘛。
解决方案:
要解决,很简单也很直接,直接改小就行了。
BUT,有些环境对这个日志是有要求的,必须要保留一段时间;如果是这样,那就不能改小了,扩容内存即可。