最近在windows server 2012機器上在作性能測試時,發現8G物理內存,內存使用率佔到了90%多,在「進程」列表中全部進程內存相加才2個多G,同時任務管理器->「性能」標籤一項中,非內存緩衝池很高佔到了5個多G。html
在網上找了一些資料,說是windows8系列有內存泄露的BUG,會引發「非內存緩衝池」一直佔用很高。當前系統初步懷疑可能也是這個問題。windows
參考文檔:服務器
一次DB服務器性能低下引起的對Nonpaged Pool Leak問題的診斷工具
http://tieba.baidu.com/p/2728129582post
先使用poolmon.exe來分析哪一個組件佔用內存高,再對這個組件作相應的處理。性能
對於分頁緩衝池與非頁面緩衝池測試
PagedPool 和 NoPagedPool的區別、Windows kernel poolurl
一、頁面一直鎖定在物理內存中,不會被換出到頁面交換文件中.net
二、Windows把虛擬地址分爲用戶地址空間和系統地址空間,用戶地址空間是給應用程序使用的,系統地址空間是給系統核心和驅動程序使用的。系統地址空間分爲分頁池和非分頁池,分頁池是指映射到分頁文件的虛擬地址,當要使用該地址時才交換到物理內存中,由系統來調度;非分頁池是指直接在物理內存中分配的內存。「頁面緩衝池」就是進程佔用的分頁池中的虛擬內存,是進程調用某些系統功能時,由系統核心或者驅動程序分配的。若是一個程序佔用的頁面緩衝池內存不斷增大,就是內存泄露,一般應該是建立或打開了句柄沒有關閉。3d
在perfmon計數器裏統計這兩個參數時,momory對象與process對象裏都存在相關的值(兩種pool都會被映射到每個進程空間內)。