練習 1.4:建立更進階的探測

開始之前,您必須先完成練習 1.3:部署您的探測

Probekit 可用來解決許多實際發生的除錯與執行時期分析問題。您現在已經瞭解撰寫和部署探測的基本觀念, 所以本課程以及接下來的課程將不會引導您執行活動,而是會提供許多關於探測的建議, 所以您可以撰寫探測來探索您自己的應用程式。

探索異常狀況

假設 Servlet 中有某個方法偶而會擲出異常狀況。日誌訊息可能無法提供太多幫助;它沒有清楚地指出問題所在。如果要取得詳細資訊, 您可以撰寫一個在每次方法擲出異常狀況時執行的探測,而探測的片段中的 Java 程式碼可以記載異常狀況訊息以及方法的引數。 這樣就能協助您察看擲出異常狀況的原因。

當您撰寫和部署這個探測時,請注意下列幾點:

探索方法的不穩定效能

以下是相當複雜的探測範例。假設您的程式中有一個方法通常可以快速地執行,但有時會需要很長的時間(例如,超過 100 毫秒)。

您可以撰寫一個探測來記載每次方法執行的進入和結束時間。當執行時間較短時,探測並不會作用。當執行時間很長時,探測會報告方法的引數,以及關於當時的程式狀態的其它重要資訊。這樣可以讓您判斷導致執行時間較冗長的情況。

當您撰寫探測時,請注意下列幾點:

當方法進入時,這個探測會記錄現行時間。當方法結束時,探測會比較現行時間與記錄的進入時間, 如果經歷的時間超過特定的時間量(您在 "thresholdDuration" 中指定的數量), 它就會使用 System.out 來列印報告。

探索遞迴或多重執行緒方法的不穩定效能

我們剛才討論的探測並不適用於遞迴(直接或間接)的方法, 而且它也無法用於可能同時在多重執行緒中執行的方法。如果要解決遞迴的問題, 您可以記錄「堆疊」的進入時間;如果要解決多重執行緒的問題,您可以將堆疊儲存在 ThreadLocal 變數中。

在建立探測時,如果要能夠安全地使用遞迴和多重執行緒方法,您需要執行下列程式碼:

繼續進行指導教學的練習 1.5:使用執行時期程式庫來執行更複雜的探測邏輯

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