官术网_书友最值得收藏!

1.4 對線程的監視

一個真實的Java系統運行時往往有上百個線程在運行,如果沒有相應的工具對這些線程進行監視,那么這些線程對于我們來說就成了黑盒。而我們在開發過程中調試代碼、定位問題,甚至定位線上環境(生產環境)中的問題時往往都需要將線程變為白盒,即我們需要知道系統中特定時刻存在哪些線程、這些線程處于什么狀態,以及這些線程具體在做什么事情。

JDK自帶的工具jvisualvm[8]可以實現對線程的監視,它適合在開發和測試環境下監視Java系統中的線程情況。圖1-2展示了使用jvisualvm監視一個正在運行的Eclipse實例中的線程的情況,監視范圍包括有哪些線程,以及這些線程的狀態和調用棧。

圖1-2 使用jvisualvm監視Java線程

當然,如果是線上環境,我們可能不便使用jvisualvm。此時可以使用JDK自帶的另一個工具jstack[9]。jstack是一個命令行工具,通過它可以獲取指定Java進程的線程信息。例如,假設某個正在運行的Eclipse實例對應的Java進程ID(PID)為11195,那么通過以下命令可以獲取該Eclipse實例中的線程情況:

執行上述命令,部分輸出如圖1-3所示。

圖1-3 使用jstack監視Java線程

在Java 8中,我們還可以使用Java Mission Control(JMC)工具來監視Java線程,如圖1-4所示。

圖1-4 使用JMC監視Java線程

主站蜘蛛池模板: 宁阳县| 汾西县| 卢氏县| 基隆市| 商水县| 苏尼特右旗| 萝北县| 南溪县| 裕民县| 玛纳斯县| 香港| 晋中市| 凤城市| 邯郸市| 毕节市| 镇平县| 饶河县| 南投市| 丹寨县| 仁怀市| 涪陵区| 米脂县| 肇东市| 新巴尔虎左旗| 鸡西市| 名山县| 上蔡县| 合作市| 荣成市| 潞西市| 枞阳县| 松潘县| 安康市| 海伦市| 芦溪县| 三穗县| 伊宁市| 永胜县| 八宿县| 杭锦后旗| 钟祥市|