前言
我正在調用供應商的 Java API,在某些服務器上,JVM 在登錄 API 后似乎進入了低優先級輪詢循環(CPU 使用率為 100%)。其他服務器上的同一應用程序不會出現此行為。這發生在 WebSphere 和 Tomcat 上。環境設置起來很棘手,因此很難嘗試在 Eclipse 中進行分析。
有沒有辦法分析(或其他檢查方法)在 Tomcat 中運行的現有 Java 應用程序,以找出處于這種 spinwait 狀態時正在執行的方法?當應用程序處于此狀態時,它只執行一種方法(供應商的方法)。供應商無法復制該行為(當然)。
解決
JRockit 任務控制延遲分析器。
JRockit 附帶的延遲分析器向您顯示當 JVM 什么都不做時它正在“做什么”。在最新版本中,您可以看到以下延遲:
- Java 等待/阻塞/睡眠/停放。
- 文件輸入/輸出
- 網絡 I/O
- 內存分配
- GC 暫停
- JVM 延遲,例如代碼生成和類加載
- 線程暫停
該工具會在延遲發生時為您提供堆棧跟蹤。您可以通過多種不同方式查看延遲數據(聚合跟蹤、作為直方圖、在線程圖中等)。該工具還允許您查看線程之間的轉換,例如當一個線程通知另一個線程時。
開銷可以忽略不計,并且與許多其他工具不同,它可以在生產環境中使用。這篇博文給你一個簡單的介紹,程序可以再這里下載。
它可以免費用于開發!
聯系方式
關于文章中提到的工具可以通過關注公眾號《編程樂學》獲取對應資料,同時,公眾號還有更多有趣的項目以及關于學習編程的筆記資料大家可以看看,歡迎大家進行留言。