现象: 8G内存,过一阵,就内存99%,但是进程里只有4G多。 程序无法使用,只能重启电脑。
分析过程: (1)首先,拿神器RamMap.exe看看,发现 程序占用3G多, Page Table占用1G,还一直在慢慢涨 NonPaged Pool占用900M,比较稳定
(2)搜了半天Page Table,没啥进展。 后来点开进程列表页,发现postgres.exe怎么这么多,下拉框都拉不完 目测得有2万多个。 进数据库,看连接数,才几十个,很正常啊。 系统管理器,看postgres.exe也是几十个。
(3)pg处理新连接时,就是fock一个postgres.exe进程出来,处理后进程就应该关闭了。 郁闷半天,后来搜得一文,说RamMap.exe的进程列表是包括僵尸进程的。 这些进程已经结束了,但是句柄没有释放。 每个postgres.exe僵尸进程占用4K内存+16K的pageTable=20KB 20000*20=400000=400MB, 看来不止两万个。
(4)为什么会僵尸呢,搜了半天,貌似是某些驱动的问题。 有的是安装Advantage Database Server v7.1,带来的aksdf.sys和 hardlock.sys有问题。 有的是Logitech webcam driver 有的是Lenovo RapidBoot Shield. 笨方法就是,挨个卸载,然后通过RamMap.exe看是否有僵尸进程产生。 https://social.technet.microsoft.com/Forums/windowsserver/en-US/0b610346-fc53-4b39-8cfd-9737d265c3f4/physical-memory-leak-by-terminated-processes?forum=winservergen
(5)怎么解决?重装大法。
|