檢視效能瓶頸

效能瓶頸可以利用「統計值」視圖立即識別出來。本主題說明一個嘗試提昇執行時間的實務。「套件統計值」視圖是個很好的起點,因為它會指出造成執行時間過慢的套件。我們會從這裡往下進行, 並尋找造成執行效能不佳的類別和方法。

在啟動要側寫的應用程式時,我們會啟用執行流程資訊的收集功能。(請選取側寫選項應用程式太慢,然後從「詳細資料」選項中,選取顯示執行流程圖形式詳細資料。)   

「套件統計值」視圖開啟時看起來如下:

 

這個視圖會顯示各個類別的統計值,並依其包含套件分組。您可以自訂這個視圖來顯示任何類型的統計資料,如記憶體配置或時間型的統計資料。在我們的範例中,我們已確定和時間相關的直欄是可見的,因為它們包含我們所需的資訊。(按一下滑鼠右鍵,選取選擇直欄,然後將這些直欄設定成可見的。)我們也利用了「執行基本時間」直欄來排序套件。如您在上述所見,com.ibm.ws.ejbpersistence.dataaccess 套件是執行「熱點」, 而且在這個套件內,DataAccessRequestImpl 是造成執行時間過慢的類別。

在取得這個資訊之後,我們往下進行到「類別統計值」視圖,並識別出造成類別整體效能變差的方法。  


現在,我們可以清楚地看到 execute 方法是造成 DataAccessRequestImpl 類別的效能變差的原因;其執行時間和另一個方法 executeOneRowFBPK 所花的時間相較,顯得非常高。

讓我們更仔細地察看「類別統計值」視圖。這裡有一件很有趣的事情值得注意:java.text.NumberFormat 類別位在造成執行時間過慢的類別清單旁。特別是,java.text.NumberFormat.getCurrencyInstance() 佔去了該類別所花的時間。這可以讓您瞭解使用一些似乎很簡單的方法所花的代價。即使 NumberFormat.getCurrencyInstance() 看起來是個簡單的 API,但是呼叫它很多次會對應用程式的整體效能造成很大的影響。

我們現在轉為觀察 DataAccessRequestImpl.execute() 方法的方法呼叫。側寫工具有一個功能強大的特性為應用程式執行的圖形表示法,它可讓您於方法呼叫層次看到方法執行過程。這個視圖很有用,因為您可以看到執行型樣以及相同方法呼叫之間的差異。 以下是說明呼叫 DataAccessRequestImpl.execute() 方法的「方法呼叫」視圖。


 

從這個圖形中,您可以看到執行堆疊中發出這個呼叫的項目,也可以跳到該方法的程式碼。您也可以將游標橫越任何列, 來察看所花的時間。

以下的「方法呼叫」表顯示了相同的方法呼叫,但是以列表格式呈現。很有趣的是,請注意第一個方法呼叫, 其執行時間(請參照「累計時間」直欄)相較於之後的方法呼叫,顯得非常高。


 

藉由分析方法呼叫執行堆疊,我們可以發現這個特定呼叫比其他方法執行來得慢的原因。藉由查看方法呼叫的模式,我們發現 OnlineItembean.FindByValue(IndexedObject) 方法的第一個呼叫所花的時間比其他方法呼叫長很多。

因此,最後我們發現造成整體執行時間過長的原因就是 OnlineItembean.FindByValue 方法的第一個呼叫。

 

相關概念
側寫工具總覽

相關作業
側寫應用程式
啟動或連接 Java 程序

 
 

>