【1】VMMap 查看某個進程的內存使用狀態(以及虛擬內存)
轉載自官網:https://docs.microsoft.com/en-us/sysinternals/downloads/vmmap
介紹
- VMMap是一個進程虛擬和物理內存分析實用程序。它顯示了進程的已落實虛擬內存類型的細目分類,以及操作系統分配給這些類型的物理內存(工作集)的數量。
- 除了內存使用情況的圖形表示之外,VMMap還顯示摘要信息和詳細的進程內存映射。強大的過濾和刷新功能使您能夠確定進程內存使用量的來源以及應用程序功能的內存成本。
- 除了用於分析實時過程的靈活視圖之外,VMMap還支持多種形式的數據導出,包括保留所有信息的本機格式,以便您可以加載回來。它還包括啟用腳本方案的命令行選項。
- 對於希望了解和優化其應用程序的內存資源使用情況的開發人員而言,VMMap是理想的工具。
屏幕截圖
名詞說明
Committed: 進程向OS宣稱要使用的內存大小(在虛擬內存進行了分配),基本上都不等於進程實際使用的物理內存大小。
- 一是其中統計了進程所鏈接的所有動態庫的空間,比如標准C庫,而實際上OS在內存中只加載一份C庫的代碼段,所有進程共享使用。但每個進程在運行時,依然要在自己的虛擬內存空間為C庫分配好地址,OS的動態庫管理程序會進行映射;
- 二是OS分虛擬內存和物理內存。32位電腦上,每個進程的虛擬內存空間可達4GB。當進程malloc()申請10MB空間時,先在虛擬內存中預留出10MB的地址空間(統計入Committed),但只有在真正讀寫這10MB空間時,才會通過缺頁中斷去創建對應的物理內存,並在進程的Total WS(WorkSet)中體現。所以Committed相對於進程實際使用的物理內存都比較大。
Private Bytes:上面的Committed包含了很多共享庫的內存,Private Bytes則是屬於進程獨占的內存。比如一個動態庫,雖然代碼段是共享的,但數據段是每個進程各自拷貝一份並維護。
Private Bytes依然不完全等於進程使用的物理內存,它是進程獨占的虛擬內存大小統計。
Working Set: 進程使用中的物理內存,包含了進程獨占的物理內存和可共享的物理內存(主要是共享庫所使用的物理內存)。
注意:使用“使用中”,是為了強調進程只是正在使用這塊物理內存,但並不代表全部是由進程申請的。
示例解讀:
進程虛擬內存已經分配了206,264KB(Committed);
其中屬於進程私有的虛擬內存為34,148KB(Private Bytes),兩者差值可以粗略認為是各種可共享動態庫所占的虛擬內存大小。
進程實際使用中的物理內存是32,540KB(Working Set)。
下圖中,Committed、Private、Total WS分別對應於上面的Committed、Private Bytes、Working Set。其中:
Total WS = Private WS + Shareable WS。
Shared WS:表示Shareable WS中已經共享的部分。
Image:進程自身可執行文件以及包含的所有庫。雖然這些庫的總大小為176,184KB,但很多是共享的,屬於進程獨占的只有13,184KB。
其他名詞解釋可見VMMap里面的Help。
對於進程內存優化,大部分時候重點關注Heap行的Total WS使用情況,即進程堆中分配且實際使用的物理內存。
下載與相關鏈接
下載VMMap (1.3 MB)
現在從Sysinternals Live運行。
運行:
- 客戶端:Windows Vista及更高版本。
- 服務器:Windows Server 2008及更高版本。
【2】RAMMap 內存查看
【2.1】英文版
官網:https://docs.microsoft.com/zh-cn/sysinternals/downloads/rammap
最佳實踐:
Process Private: 分配給單一Process專用的內存
Mapped File: 用來儲放檔案內容快取(Cache)的內存空間
Shared Memory: 標注給多個Process共用的內存分頁(Page,內存管理單位)
Page Table: 用來描述虛擬內存位址的分頁表(裡面是一筆一筆的PTE,Page Table Entries)
Paged Pool: 允許移至硬盤的核心集區內存(Kernal Pool Memory)
Nonpaged Pool: 不允許移至硬盤的核心集區內存
System PTEs: 與I/O空間、核心堆疊、內存描述清單等系統分頁相關的PTE
Session Private: 登入工作階段相關的內存
Metafile: 是系統快取的一部份,包含NTFS Metadata(包含MFT及其他NTFS Metadata檔案)。在MFT中,每個檔案屬性記錄佔用1K,而一個檔案至少有一個屬性記錄,再加上其他NTFS Metadata檔,當檔案數眾多,這塊會很快速成長。
AWE: 啟用Address Windowing Extension技術所使用的相關內存空間(較常應用在SQL或其他DB)
Driver Locked: 驅動程式鎖定的實體內存。多用於I/O的暫時性小量應用,如果有裝RAMDisk,也會算在這一區。
Kernel Stack: 核心執行緒推疊,執行緒愈多,用量愈大。
每項分類都有以下欄位:
Active: 正在使用中的實體內存分頁(Process Working Set或System Working Set)
Standby: 留在實體內存但暫不使用的分頁,保留供后續能快速重覆利用
Modified: 與Standy類似,但內容被修改過,重覆使用前要先回寫到硬盤機
Modified no write: 與Modified類似,但標注為不需回寫到硬盤
Transition: 在分類之間轉換的分頁
Zeroed: 內容已清空可供使用的分頁,系統剛開機時明顯增加,隨著使用一段時間逐步轉為Standby
Free: 可以使用但殘留先前資料的分頁,使用前需先轉為Zeroed
Bad: 標注損壞的內存
【2.2】中文版
中文版參考下載自:http://www.downxia.com/zixun/42021.html
運行RamMap,顯示主界面,和“資源監視器”中的內存分析工具差不多,不過顯示的信息更為詳細。下面一一瀏覽。
【內存使用計數】
水平圖主要是按基本類型活動內存、備用內存等分。
垂直圖則按照映射文件、可共享等區分。
【進程統計】
在這里可以看到各個進程的詳細使用情況。特別是備用和私有里頭的內存分配大小。
【優先級內存摘要】
這里則顯示了備用內存中各個優先級的頁所占用的空間。
【物理內存】
這里顯示了內存的具體使用情況。
【物理范圍】
從這里可以看到內存地址的分配。
【文件摘要】
這里顯示預加載的文件大概信息,比如緩存大小,正在使用中的大小等。
【文件詳細信息】
這里是前面文件摘要的詳細信息結果,從這里可以看出每個文件中被加載的大小,類型,是在哪種內存中等等詳細信息。
以上就是RamMap的使用指南,希望對你有幫助。