共用方式為


練習 1 - 識別包含大型工作集的程序

用來分析資料的方法可以採用數種方法,並根據調查開始的情況而有所不同。 本練習討論並呈現一些範例方法,以及各種資料行排列所呈現的不同檢視。

稱為「駐留集」的資料是目前位於實體記憶體中的頁面集, (RAM) 。 「駐留集」是追蹤擷取結尾的目前記憶體狀態快照集,其中 具有 Windows Performance Recorder (WPR) 或評定工具組記憶體評估。 無法在單一追蹤中收集多個快照集。

駐留集合提供系統上記憶體組合的整體和即時快照集。 通常基於下列原因,對「駐留集」分析進行調查:

  • 若要瞭解實體記憶體使用量,特別是當實體記憶體使用量高於預期時。

  • 若要瞭解進程私人工作集的來源,特別是當進程私人工作集大於預期時。

  • 系統因分頁活動而發生回應性問題。

步驟 1:使用評定工具組收集資料

Windows 評定工具組包含測試,可測量開機後的記憶體使用量。 您可以使用 記憶體使用量 評估結果來收集映射軟體預先載入的基準。 許多進程和服務一律正在使用中,並佔用記憶體。 此評估可協助您瞭解驅動程式和應用程式 (如何一律執行,) 影響開機程式。

  1. 從 [開始] 功能表開啟 [Windows 評定主控台] (WAC)

  2. 開啟 [ 選項] 功能表,然後選取 [ 新增作業...

    1. 輸入 MemoryTest 作為作業名稱。

    2. 選取 [建立自訂作業]。

  3. 按一下 [ 新增評定]。

    • 按一下 「+」 符號以新增 記憶體使用量 評估
  4. 按一下新新增的 記憶體使用量 評估以輸入測試組態。

  5. 取消選取 [使用建議的設定 ],然後針對組態選取 [ 快速執行 ]。

    • 快速執行 可讓測試以較短的時間完成,以犧牲資料精確度。

    Windows 評定主控台的螢幕擷取畫面。

  6. 選取 [快速執行 ] 後,您有兩個選項:

    1. 封裝 作業,以建立具有所有測試資源的資料夾,並將它複製到另一個測試系統。 (按一下右下角的 [ 套件...] 按鈕,以選擇此選項。)

    2. 直接在系統上執行作業。 (按一下右下角的 [ 執行 ] 按鈕以選擇此選項。)

      • 這會重新開機系統以收集追蹤。

      • 此測試可能需要 15-20 分鐘才能完成。

    我們想要 [ 執行 ] 選項。

步驟 2:使用 WAC 將記憶體使用量評估結果視覺化

完成評估之後,您可以開啟結果 XML 檔案,其中包含系統上記憶體使用量的摘要。

步驟 2.1:開啟記憶體報表

  1. WAC中,開啟 [ 選項] 功能表,然後選取 [ 開啟結果...

    • 您也可以在鍵盤上按 CTRL+R
  2. 按一下 [ 流覽...] 按鈕。

  3. 流覽至您在步驟 1 中儲存所建立評定的資料夾。

  4. 開啟您在步驟 1 中建立的評定。

    此報表包含不同的類別,可協助您瞭解驅動程式和進程對整體記憶體使用量的貢獻。

    報表看起來應該像這樣。

    顯示記憶體使用量的 Windows 評定主控台範例報告。

  5. 查看 驅動程式處理私人頁面 類別,花一點時間熟悉報表。

在上述範例中,使用 1487 MB 的記憶體超過 4 GB 的實體 RAM。

  • 使用中的記憶體 = 處理工作集 + 非分頁式記憶體 + 修改的頁面

  • 可用記憶體 = 待命記憶體 + 可用記憶體

在上述範例中,記憶體使用量最大的取用者是非分頁的驅動程式配置,而 613 MB 則用於處理私人頁面, (私人工作集) 。

如需計量的詳細資訊,請參閱 MSDN 上 記憶體使用量評估的結果 主題。

步驟 2.2:檢閱驅動程式非分頁配置

此計量類似于分頁配置,不同之處在于這些配置使用無法分頁的實體記憶體。這反映固定的實體記憶體,因此無法用於分頁記憶體,或由其他進程和服務使用。 取得太多非分頁式記憶體可減少支援記憶體可以使用的記憶體數量。

  1. 按一下左側箭號,展開 [驅動程式非分頁配置] 類別。

  2. 展開 DriverLockedSystemPages 類別。

    • 這是從分頁記憶體載入的記憶體,然後由驅動程式鎖定,直到不再有用為止。
  3. 識別具有最大記憶體使用量的驅動程式。

    Windows 評定主控台的範例報告,其中顯示驅動程式非分頁配置使用量。

您可以交換記憶體需求較低的硬體或軟體驅動程式,以影響此計量。

驅動程式廠商透過設計驅動程式的方式,對這個計量有最大的影響。 在 WAC中顯示的結果中尋找大型記憶體配置。 此外,驅動程式廠商還可以提供效能追蹤, (儲存在與評量結果相同的目錄中,並使用此評定的 WPA) 進行分析,以尋找大量記憶體配置區域,以供調查以降低記憶體使用量。

步驟 2.3:檢閱程式私人工作集

整體記憶體使用量的最大使用者是可能一律在背景中執行的應用程式,而不需要使用者的知識。 若要檢視進程使用的記憶體數量,您可以使用報表中的 [處理私人頁面 ] 類別。

  1. 按一下左側的箭號,展開 [ 處理私人頁面 ] 類別。

  2. 展開 [ 使用中 ] 類別。 此清單會顯示二進位檔及其使用中記憶體。

    您的檢視看起來應該像這樣:

    顯示進程記憶體使用量的 Windows 評定主控台範例報告。

  3. 識別使用最多記憶體的進程。

您可以藉由減少執行登錄機碼或啟動資料夾中的應用程式「永遠執行」應用程式數目來影響此計量。 分析已新增應用程式的影響。

驅動程式和軟體廠商透過其程式碼的設計方式,對這個計量產生最大影響。 在 WAC中顯示的結果中尋找大型記憶體配置。 此外,軟體廠商還可以提供效能追蹤, (儲存在與此評量結果相同的目錄中) ,以尋找大量記憶體配置區域,以供調查以降低記憶體使用量。 即使是小型配置,也仔細分析,可協助開發人員尋找增加的配置。

步驟 3:使用 WPR 收集駐留集資料

在步驟 1 和 2 中,您已瞭解如何使用 評定工具組記憶體使用量 評估來收集記憶體追蹤。 此評估只能擷取開機案例的追蹤。 您可以使用Windows Performance Recorder (WPR) ,擷取任何案例的追蹤 (應用程式啟動、網頁流覽等)

請遵循下列步驟來收集具有「駐留集」資料的追蹤。

  1. 從 [開始] 功能表開啟Windows Performance Recorder

  2. 選取 [第一層分級][駐留設定分析] 錄製設定檔,但保留其他選項的預設值。

  3. 按一下 [開始 ] 並等候幾秒鐘。

    Windows 評定主控台 [記錄系統資訊] 畫面的螢幕擷取畫面,其中顯示未啟動狀態錄製

  4. 按一下 [ 儲存 ] 並將 ETL 追蹤儲存至磁片。

您現在有系統記憶體組合的快照集。

步驟 4:使用 WPA 解譯駐留集資料

請遵循此程序:

  1. 從 [開始] 功能表啟動Windows 效能分析器

  2. 開啟您剛才收集的 ETL 追蹤 ([ 檔案 ] 功能表 [ 開啟...]) 。

  3. 展開Graph 總管中的[記憶體集]。

    WPA 圖表總管檢視的螢幕擷取畫面。

  4. [駐留集] 圖形拖放到 [分析] 索引標籤中。

您的檢視看起來應該像這樣:

顯示分析索引標籤檢視的 WPA 螢幕擷取畫面。

檢閱資料的呈現方式。 以下是執行最上層分析最實用資料行的一些定義:

資料行 定義
MMList

包含頁面的記憶體管理清單。

  • 作用中 – 目前在進程私用工作集或核心工作集內的頁面。

  • 待命 – 待 命清單中的未修改頁面。 它們是可用記憶體的一部分。

  • 已修改 – 處理自上次保存至永久儲存體以來修改的私人或檔案支援頁面。

  • ModifiedNoWrite – 已修改但不會保存到永久儲存體的頁面。

  • 轉換 – 在清單之間轉換的頁面。

處理

頁面擁有者的進程名稱。 此資訊僅適用于處理私人頁面。 即使它們未共用,所有可共用頁面都會與「未知」 (-1) 程式相關聯。

說明

表示的值會根據頁面類別而有所不同。 例如:

  • 對於映射、驅動程式、檔案等,它會顯示完整的檔案路徑和名稱。

  • 針對 區記憶體,它會顯示驅動程式集區標籤名稱。

頁面類別

頁面內含的資料類型,如下所述。 其中一些可能的類別包括:

  • CopyOnWriteImage – 處理修補可執行檔映射所建立的私人頁面,匯入位址資料表或重新處理可執行檔。

  • 驅動程式 – 驅動程式的字碼頁。

  • DriverFile – 從驅動程式可執行檔讀取並對應為數據的字碼頁。

  • DriverLockedSystemPage – 在記憶體中鎖定或釘選的核心模式頁面,通常是由驅動程式或核心所鎖定。

  • Image – 從 .dll 和 .exe 檔案載入為可執行映射的頁面。

  • MapFile – 載入為數據之資料檔案或影像的頁面。

  • NonPagedPool – 包含不可分頁系統集區資料的頁面。

  • PagedPool – 包含可分頁系統集區資料的頁面。

  • PFMappedSection – 頁面檔案所支援的記憶體對應區段頁面。

  • SystemPage – 包含用來對應系統頁面的系統頁面資料表專案的頁面,例如 I/O 空間、核心堆疊和記憶體描述項清單。

  • UserStack – 包含每個執行緒的使用者模式資料的頁面。

  • VirtualAlloc – VirtualAlloc API 配置的頁面。

  • Win32Heap – 堆積頁面。

大小 (MB)

每個類別中匯總的頁面大小總計。

步驟 6:識別影響記憶體使用量的進程工作集

根據摘要資料表中的資料行相片順序,可以透過許多不同的方式來顯示駐留資料集資料。 摘要資料表有數個預先定義的資料行相片順序,可用來作為調查的起點。

  1. 選取 [ 處理私人工作集 ] 預設。

    WPA 進程私人工作集下拉式清單的螢幕擷取畫面。

  2. 展開 [ 作用中 MMList] 群組。

    1. 將焦點放在 [ 作用 中] 類別,因為其目前會影響記憶體使用量。

    2. 待命 頁面可能會在記憶體壓力下釋放。

    3. 修改 的頁面可以寫入磁片並釋放。

  3. 按一下 [ 大小] (MB) 資料行標頭,依大小排序。

  4. 識別具有最大使用量的進程。 您可能會看到 N/A「Unknown (-1) 」 作為進程名稱。

    • N/A 包含未與任何進程相關聯的頁面,例如驅動程式集區記憶體。

    • 「Unknown (-1) 」 包含可共用的頁面。

  5. 展開程式以查看 [頁面類別]。

    1. 您現在可以在下圖中看到進程工作集的組合。

    2. 熱門類別應該是 VirtualAlloc 或 Win32Heap,我們將在練習 2 中進行分析。

    3. 在下列範例中, SearchIndexer.exe 透過 堆積 配置使用 21.7 MB 的作用中記憶體,以及透過 VirtualAlloc API 呼叫使用 12.4 MB。

    顯示進程使用方式的範例資料表。

專注于協力廠商程式,並判斷它們是否需要在開機時啟動,作為預先載入軟體的一部分。 身為開發人員,您應該分析程式正在進行的動態配置,以瞭解可以在哪裡進行優化。