记录一起Windows内存泄露故障排查

前言

最近几个月一直感觉电脑开机久了就会很卡,甚至到最后各种软件闪退,系统无法正常使用,只能通过重启系统来解决,但是连续开机一两天后又是如此。

通过观察任务管理器内存占用,发现可能是某个软件内存泄露导致的。

这是正常的内存占用,分页缓冲池一般占用不超过1G,且不操作系统时,不会有明显增加。

而我的系统分页缓存池占用一直不断增加,开机不久就会超过1G,然后2G.....,已提交内存也是一直不断增加,甚至是没有对系统进行任何操作的时候,最后已提交内存(也就是虚拟内存)被占满,系统也就开始崩溃了。

所以这肯定就是内存泄露了,怎么找出元凶是关键。

解决

怎么找出泄漏源呢?这里用到了poolmon这个命令行工具。

poolmon集成在wdk里,需要运行wdksetup.exe进行安装,不过也可以在网上单独下载poolmon.exe进行使用。

1、重启电脑

2、执行poolmon命令,可以按下B键进行排序。

 然后可以看到tag为FMfn的一项占用居前且Bytes一项的值不断升高(图文不相关,当时忘了截图),由此可见很大概率是这一项导致的内存泄漏。

3、切换到C盘根目录,使用findstr /m /l /s FMfn *.sys查找内存标记为FMfn的驱动模块.

发现内存标记为FMfn的驱动模块为fltMgr.sys,该驱动为系统提供的minifilter框架驱动,那就可能是系统各种的minifilter调用框架api,产生了内存分配,却没有释放导致。

 4、使用fltmc命令查看系统中存在哪些minifilter。

再次使用findstr /m /l /s 模块名 *.sys查找可疑模块。

当排查到wiseFs模块时感觉可疑。

运行findstr /m /l /s WiseFs *.sys后指向C:\Windows\WiseFs64.sys这个文件。

电脑上并未安装此软件(但之前确实运行过一次单文件版本),故直接在PE系统下删除此文件(系统启动情况下提示占用无法被删除)。

删除文件后重启系统,观察一阵,内存占用终于正常了。

至此,此次内存泄露的故障终于得到解决。

参考

1、https://bbs.sangfor.com.cn/forum.php?mod=viewthread&tid=132589

2、https://cloud.tencent.com/developer/article/1871416

posted @ 2023-03-01 15:36  書劍飄零  阅读(2124)  评论(0编辑  收藏  举报