Windows非分頁(yè)緩沖池內(nèi)存使用率較高的問(wèn)題
問(wèn)題描述
有一臺(tái)Windows Server 2019的服務(wù)器部署在阿里云上,通過(guò)持續(xù)觀察,其內(nèi)存使用率始終保持在90%以上,并且其中沒(méi)有占用內(nèi)存高的進(jìn)程。重啟服務(wù)器后,內(nèi)存使用率降至低位,但是在一周時(shí)間內(nèi),再次增至90%以上,嘗試增加服務(wù)器內(nèi)存后,此問(wèn)題依舊存在。
圖片
通過(guò)任務(wù)管理器的性能頁(yè)查得非分頁(yè)緩沖池有7.7G,其在正常情況下很少超過(guò)200-400MB。
圖片
解決過(guò)程
1、使用RAMMap查看內(nèi)存使用的情況
RAMMap下載地址:https://download.sysinternals.com/files/RAMMap.zip
解壓后,無(wú)需安裝直接運(yùn)行RAMMap64.exe,得內(nèi)存使用情況如下:
圖片
通過(guò)分析發(fā)現(xiàn),情況和任務(wù)管理器看到的基本一致,非分頁(yè)緩沖池消耗了約8G內(nèi)存,其它項(xiàng)基本正常。
2、使用Poolmon分析Nonpaged Pool(未分頁(yè)緩沖池)具體是被哪個(gè)程序占用
Poolmon下載地址(適合Windows Server 2019):https://download.microsoft.com/download/1/4/0/140EBDB7-F631-4191-9DC0-31C8ECB8A11F/wdk/wdksetup.exe
??注意:Poolmon需要進(jìn)行安裝,如果不想安裝在服務(wù)器系統(tǒng)內(nèi),可以先在Windows 10上進(jìn)行安裝,然后將C:\Program Files (x86)\Windows Kits\10\Tools\x64\poolmon.exe 拷貝到服務(wù)器系統(tǒng)內(nèi)運(yùn)行。
啟動(dòng)Poolmon工具后,按P鍵,第二列將顯示使用非分頁(yè)緩沖池內(nèi)存(Nonp 屬性)的進(jìn)程標(biāo)簽。然后按B鍵以字節(jié)進(jìn)行排序。
圖片
左列列出了驅(qū)動(dòng)程序標(biāo)簽。需要使用此標(biāo)簽識(shí)別驅(qū)動(dòng)程序文件。
在此示例中,可以看到非分頁(yè)緩沖池中的大部分 RAM 由標(biāo)簽為FLTT的驅(qū)動(dòng)程序占用。
3、使用findstr查找與標(biāo)簽關(guān)聯(lián)的驅(qū)動(dòng)程序文件
圖片
查看這2個(gè)驅(qū)動(dòng)文件的屬性--詳細(xì)信息,獲知是阿里巴巴服務(wù)組件。
4、查看進(jìn)程
獲知問(wèn)題原因是進(jìn)程名為:
Alibaba Enterprise Security Service component,服務(wù)名為:EntSafeSvr,導(dǎo)致的內(nèi)存使用率過(guò)高的異常。
總結(jié)
Windows 計(jì)算機(jī)和服務(wù)器可能會(huì)遇到內(nèi)存溢出問(wèn)題,該問(wèn)題是由于將數(shù)據(jù)存儲(chǔ)在系統(tǒng)非分頁(yè)緩沖池中的某個(gè)系統(tǒng)驅(qū)動(dòng)程序泄漏而引起的。
非分頁(yè)緩沖池是操作系統(tǒng)內(nèi)核和驅(qū)動(dòng)程序使用的計(jì)算機(jī) RAM 中的數(shù)據(jù)。
非分頁(yè)緩沖池永遠(yuǎn)不會(huì)交換到磁盤(pán)(分頁(yè)文件),它始終只存儲(chǔ)在物理內(nèi)存中。
您可以在任務(wù)管理器中的“性能” 選項(xiàng)中查看當(dāng)前非分頁(yè)緩沖池的大小。
通常,非分頁(yè)池的大小很少超過(guò) 200-400 MB。較大的非分頁(yè)緩沖池通常表明某些系統(tǒng)組件或設(shè)備驅(qū)動(dòng)程序中存在內(nèi)存泄漏。
出現(xiàn)上述問(wèn)題時(shí),可以嘗試使用RAMMap查看當(dāng)前內(nèi)存的使用情況,使用Poolmon分析非分頁(yè)緩沖池的占用情況,使用findstr查找具體的驅(qū)動(dòng)程序。
參考鏈接:https://woshub.com/huge-memory-usage-non-paged-pool-windows/