重慶政府是指什么廣州網站運營專業(yè)樂云seo
某一天,
工作所用筆記本突然越來越卡直至死機
以為只是windows11的抽風行為,之前就因為windows11資源管理器經??ㄋ?#xff08;后升級小版本好多了)。
遂長按電源鍵強制關機重啟。
然慢慢又越來越卡,直至卡死,無奈再次重啟。
開機后打開任務管理器實時觀測CPU和內存占用情況。
發(fā)現內存占用正在以微妙的速度慢慢增長,到達%60后,按照內存占用大小對進程排序,前幾的都是常用應用,關掉后仍然沒有阻止上漲的趨勢。
80%后機智的保存正在編寫的各個文件,等待死機。
再次強制重啟后,立馬打開任務管理器,回憶最近有沒有做過什么操作,打開殺毒軟件,一切正常,突然地想起最近安裝了某軟件。
等待內存不斷升高,然后查看該軟件相關進程,看不出啥。。猛地發(fā)現該軟件似乎開了很多小進程,雖然每個進程占用很小的內存,但我直接忽略,誰知道還開了啥看不到的進程,找該軟件相關人員詢問。
相關人員表示懵逼,我也懵逼,忘記了去詢問的原因,強裝鎮(zhèn)定。
后無奈排除該原因,又開始新一輪回憶,然并卵。
后按“國際慣例”,遇到問題不是從底層原理開始分析問題,而是。。直接谷歌百度。
找到一篇關于定位Windows內存泄漏的文章,使用了PoolMon工具,Poolmon是一款windows平臺下的核心內存泄漏檢測工具。
到官網下載Poolmon和RAMMap工具。
關于RAMMap的微軟介紹:RAMMap - Sysinternals | Microsoft Learn
關于PoolMon的微軟介紹:PoolMon - Windows drivers | Microsoft Learn
poolmon集成在wdk里,需要運行wdksetup.exe進行安裝。
https://learn.microsoft.com/zh-cn/windows-hardware/drivers/download-the-wdk
爭分奪秒的感覺,要在下次死機前下載安裝完。。
下載安裝完成,打開使用!
RAMMap直接下載解壓,打開使用。
poolmon:進入到?"poolmon的絕對路徑目錄",打開cmd,poolmon.exe的位置C:\Program Files (x86)\Windows Kits\10\Tools\x64\poolmon.exe。
.\poolmon.exe -b啟動運行,-b是按照內存字節(jié)大小倒序排列。
此時內存來到了58%,我能否在卡死之前解決該問題呢。
首先利用RAMMap查看占用高的進程,發(fā)現MemCompression進程,這個進程在windwos自帶的任務管理器看不到,該進程是官方的內存壓縮功能,雞賊的是反而內存以及CPU增加了,不管三七二十一,直接關閉該功能。管理員身份運行Disable-MMAgent -mc。問題不在這,意料之中。
然后利用poolmon,定位NpCD,類型為Nonp,這是在任務管理器查不到的內存占用,發(fā)現其申請(Allocs)了大量內存,但是釋放(Frees)0內存,明顯的內存泄漏, 持續(xù)觀察一段時間,發(fā)現其占用總內存(Bytes)持續(xù)增長,看來是內存泄漏,不斷申請導致占用不斷升高,對應的任務管理器內存已經來到了70%。而外面,落日仍有殘留余輝,混著人間燈火。
下面開始定位“始作俑者”,cd到C盤根目錄,使用findstr /m /l /s NpCD *.sys,查找定位tag為NpCD的系統(tǒng)驅動模塊文件。
與內存賽跑!
想一想人生,看了眼外面的一棵樹和樹下一塊石,突然釋懷了,何必緊張呢,大不了繼續(xù)強制重啟。
事實如我所想,一直到卡死死機,findstr沒有查找出,看來“面包不一定有,意料之外的問題總是會有的”,原來是我命令輸錯了,NpCD和*.sys之間應該有個空格,而我輸入的時候以為沒有。所以一直沒反應,還以為是我C盤文件太多了。
強制重啟后,繼續(xù)!
定位成功,為npcap所致,逝去的回憶涌來,依稀記得近段時間為了抓網路流量包,安裝了該軟件,雖然能用,但安裝過程由于與本地某軟件“不合”并不順暢,可能正是該原因,導致npcap出了點問題,內存泄漏。
于是乎,卸載npcap和相關文件。
問題成功解決!觀察很長一段時間,內存保持正常,未再出現異常增長和卡死問題了。
隨手記錄,完結。