練習 1.3:識別執行緒瓶頸

開始之前,您必須先完成練習 1.2:收集執行緒資料

使用執行緒視圖來尋找執行緒瓶頸

「執行緒視圖」會顯示應用程式中所有執行緒的狀態,並且明確地指出死結和競用。

如果要尋找瓶頸,請執行下列動作:

  1. 在「側寫監視器」中,用滑鼠右鍵按一下側寫資源,然後按一下開啟工具 > 執行緒視圖。這時會開啟「執行緒視圖」。它看起來如下:

    「執行緒視圖」的擷取畫面,顯示這次側寫執行的結果,如下文所述。

    執行緒之間的垂直箭頭是我們感興趣的地方。單向箭頭指出一個執行緒(箭頭起源處的執行緒)正在等待另一個執行緒(箭頭指向的執行緒)釋放鎖定。 雙向箭頭表示兩個執行緒處於死結狀態,彼此正在等待對方釋放鎖定。

  2. 這兩個箭頭彼此太靠近, 而無法輕易區別。若要看清楚它們,請按一下「切換至壓縮時間表」按鈕, 從預設的線性時間表切換至加權時間表。「壓縮時間表」會壓縮時間區段,在這期間不會發生重要的執行緒動作。顯示會變成類似這樣:

    擷取畫面,顯示時間表變更成「壓縮」之後箭頭的分佈情形。

  3. 「執行緒視圖」的解譯如下:

    程式啟動之後,會立即連續建立四個 philo* 執行緒。每個執行緒執行一小段時間之後會要求鎖定。 要求未順利完成。當前三個鎖定要求失敗時, 執行緒會進入等待鎖定狀態。當第四個執行緒的鎖定要求失敗時,會發生死結, 並且顯示會指出這四個執行緒全部處於死結狀態。

    philo* 執行緒正在等待其他 philo* 執行緒的鎖定, 而後者也正在等待鎖定。在此情況下,我們得到死結:程式會停滯不前。
    附註:將游標暫停在特定執行緒區段上, 您可以看到鎖定要求、死結及其他狀態的特定資訊。這個顯示的工具要訣會指定像是鎖定名稱, 並識別持有鎖定的執行緒(「鎖定的執行緒」)等資訊。

  4. 您也可以在「內容」視圖中查看執行緒區段的詳細資訊。若要顯示此視圖, 請選取視窗 > 顯示視圖 > 內容。請選取執行緒區段以顯示其內容。

現在您瞭解這個死結發生的原因,已準備好開始進行練習 1.4:解決執行緒瓶頸

讀者意見
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.