Windows系統內存分析工具的介紹(進程管理器,資源管理器,性能監視器, VMMap, RamMap,PoolMon)
微軟官方提供多種工具來分析Windows 的內存使用情況,除了系統自帶的任務管理器(Task Manager), 資源監視器(Resource Manager), 性能監視器(Performance Monitor), 還有SysInternals工具, RamMap, PoolMon用以分析內存問題。
本文簡單介紹上述工具的快速使用方法,如果需要了解深入了解,請參考微軟相關鏈接。
任務管理器
Windows 系統可以使用任務管理器進行內存監控,監控可以顯示出詳細的內存占用的進程。尤其是在性能中檢查虛擬內存的使用情況,已提交虛擬內存(Commited Bytes)/虛擬內存上限(Commit Limit)。如果已提交非常接近上限,那么系統會出現性能問題。
Windows 2008 R2 示例
通過查看還可以添加各類內存指標進行檢查,請重點檢查工作集(進程物理內存占用), 提交大小(非保留的虛擬內存空間)。
Windows 2012 示例
資源監視器
通過任務管理器,可以打開資源監視器 Resource Manager進一步檢查內存的使用情況,尤其是每個進程的使用情況。對於各個進程而言,請重點關注"提交(KB)"內存的大小,監控是否有進程消耗過多資源。
物理內存的使用包含以下幾個部分:
為硬件保留的內存
正在使用:由進程、驅動程序、操作系統使用的內存
已修改:內容必須寫入磁盤才能用於其它用途的內存
備用:包含未使用的緩存數據和代碼的內存
可用:不包含任何有價值數據,以及當進程、驅動程序、操作系統需要更多的內存時優先使用的內存
緩存:當文件被打開時,系統會把文件保存在緩存中,才以便下次迅速讀寫。Windows 2008 R2及以后,對這個緩存的使用也做了限制:有一部分物理內存不會被緩存使用,保證系統即使在緩存過大的時候,也有可用物理內存,滿足程序使用需求。
性能監視器
Performance Monitor 性能監視器是Windows 監控,收集系統資源消耗的重要工具。
監控性能消耗
通過添加指定的計數器,可以實時檢查系統資源消耗的情況
此外,還可以通過"數據收集搜集"->"用戶定義", 手工添加各類計數器,例如Logical Disk, Memory, System, Processor, Process來收集系統各類資源的實時運行情況,同時通過采樣間隔來定義收集頻率。例如,如果機器有內存泄露問題很久才能復現,可以配置采樣間隔為5秒,如果機器很容易出現CPU異常,那么可以配置采樣間隔為1秒。
RamMap, Process Explorer
有時在任務管理器的監控窗口中查看不到占用內存異常的進程,但物理內存顯示已經負載的狀態了。
這種情況一般是系統底層有占用內存的情況,可以通過RamMap工具查看系統內存的占用情況,該工具是微軟官方的軟件,相關信息及下載地址如下: https://technet.microsoft.com/en-us/sysinternals/ff700229.aspx
下載后直接運行,就可以查看任務管理器中不顯示的系統占用內存的情況。
詳細介紹:
Introduction to the new Sysinternals tool: RAMMap
Process Explorer 也可以查看進程的詳細資源占用情況,例如打開后也可以查看到進程的各類內存資源使用情況。
Pool Monitor
對於WIndows內核而言,其兩項核心的內存資源為non paged pool(非頁面緩沖池)以及paged pool (頁面緩沖池)。操作系統出現內存性能問題,很可能是上述2個資源消耗殆盡。雖然通過上述提到的工具可以查看到資源消耗的情況,但是如果需要定位是系統哪個Tag消耗的資源,需要使用PoolMon來定位。
poolmon 使用參考:
https://technet.microsoft.com/en-us/library/cc737099(v=ws.10).aspx
檢查perfmon 日志來定位究竟是哪個Pool Tag導致的資源消耗殆盡,例如一個案例,檢查到IoDn tag導致資源消耗完,通過如下命令定位到是SafeDogFileGuard.sys, 而后通過修正該應用解決。
關於Tag的介紹,請參考微軟官方Blog
http://blogs.technet.com/b/askperf/archive/2008/04/11/an-introduction-to-pool-tags.aspx