前言废话
分享一次,偶然发现的Win10内存泄露的一个案例,错的不是Win10,元凶是一个用于验证证书和USBkey的远古财务软件残留的程序,但是问题没有那么简单被发现,排查的过程中还是学到了不少东西。
这里按时间线叙述。
用到的工具:RAMMap、Win10任务管理、资源监视器
内存泄露:小故事
某日晚上,鄙人电脑用了一天,大概12小时以上,学了一天准备放松摸鱼一下,《地平线4》启动!结果游戏从菜单到游戏内容,甚至背景的音乐,一直在间断,走2步能卡3下,根本玩不了,当时我就???,去百度地平线4间断什么的,无果,心情烦躁,重启电脑,正常了。
次日,大概同一时间,又是电脑运行了一天,开始摸鱼,《战地5》启动!菜单界面还没看出猫腻,进游戏又是2步3卡,帧数狂掉,我:???。游戏自己崩掉之后,我打开任务管理器,发现性能一栏,内存居然已经吃到13GB(总共16GB)
此时进程一栏的进程们加起来也就不到3GB的样子,再次尝试重启,重启之后内存正常了,但是我已经无心摸鱼,调整了之前装的VMware的一些配置(分配的内存什么的),后来证明不是vmware的问题,因为当时虚拟机就没运行。
内存泄露:排查
第三日,我决心花费一整日观察内存占用怎么被占用的,排除了很多软件的嫌疑,比如chrome什么的,依旧找不到内存被什么占用了,如图,进程占用最多的也就几百MB。看了网上一些不对症的方法:更新显卡声卡网卡驱动(因为硬件驱动占用内存不会写在进程里),调大虚拟内存(我玩战地5卡的一比但还能运行基本就是靠虚拟内存在疯狂调度,但是还是性能低下,疯狂掉帧)都没什么卵用。
内存泄露:发现
最后在微软的官方论坛找到个办法真正的看清内存占用情况的软件Rammap和VMmap,前者对新手更友好一些,可以看总体状况。
运行Rammap之后发现占用比较多的就是三块儿内容:映射文件、进程私有和页表。
后来看到网上一个类似案例
简书:记一次 win10 下的内存泄漏分析
学到了一些知识:运行久了自己生产很多内存积累下来、页表内占用的(我当时是2个G多的页表)就是内存泄露的部分,如果继续放任不管,不进行重启,电脑最终就会面临死机,原因是因为一个程序疯狂反复“创建,申请资源,资源没释放,销毁”,每个进程创建时会从系统拿一个自增的PID进程号,我问我朋友PID号最大的也就三万多,我电脑此时已经排到43万多的PID,我应该就是一样的原因!
正好我想起似乎见到过这么一个进程,找到了,JITComVCTK_S.exe,这个进程之前有过反复创建销毁被我看到过,他对应应该有个服务在自动启动,我去win10服务里尝试把对应的服务关掉(JITProcessDaemonService),
神奇的事情发生了:
页表也恢复了正常:
JIT什么的我百度了半天也没百度出来是什么软件的,去对应的文件夹C://ProgramFiles(x86)//JIT
里康一康,这泄露内存的程序到底是什么,看了半天只找到几句模糊的说明和公司名,经过我判断应该是之前电脑上安装过的内蒙古税务局的报税软件的CA证书USBkey验证用途的软件之类卸载残留下来的程序,循环产生辣鸡的代码如下(手快给删完了只剩下截图了,一个Install一个uninstall的bat文件):
最后我把对应的服务禁用,把文件都删了,都解决了!系统平常待机内存占用终于回到了最初的样子,3.5GB左右。
还不快抢沙发