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