- Java多線程編程實戰指南:設計模式篇(第2版)
- 黃文海
- 458字
- 2021-10-15 19:24:52
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線程
推薦閱讀
- AngularJS入門與進階
- Vue.js入門與商城開發實戰
- 編寫高質量代碼:改善Python程序的91個建議
- R語言游戲數據分析與挖掘
- 跟老齊學Python:輕松入門
- Java:Data Science Made Easy
- C#程序設計
- Spring Boot Cookbook
- Angular開發入門與實戰
- ServiceNow:Building Powerful Workflows
- Vue.js 2 Web Development Projects
- Image Processing with ImageJ
- Programming Microsoft Dynamics? NAV 2015
- Windows Phone 8 Game Development
- Socket.IO Cookbook