簡體   English   中英

如何調試JVM中的掛起線程?

[英]How do I debug hanging threads in the JVM?

我在具有root用戶權限的遠程Ubuntu服務器上運行持久的Java程序。 一段時間后,某些CPU內核的使用率上升到100%。 日志顯示沒有可疑之處,並且該應用程序仍然可以運行,但是吞吐量降低了。

我如何調試JVM,以便在它仍在運行時找出原因?

使用jvisualvm連接到進程

該工具將允許您連接到正在運行的進程,並查看所有線程及其狀態。 僅通過查看哪個線程一直處於喚醒狀態就可以向您顯示哪個線程是罪魁禍首。 您可以執行線程轉儲以查看每個線程的堆棧跟蹤,並查看每個線程在做什么。

對於這種調試,它是一個非常強大的工具。 它僅與JDK一起分發,因此,您不僅需要安裝JVM運行時才能進行訪問。 確保安裝與JVM運行相同的JDK版本。

您需要轉發X顯示器才能正常工作。

一種選擇是VisualVM ,它從Java 1.6開始包含在JDK中。 我發現它在過去的某些情況下很有用。

您可以連接到本地應用程序或遠程應用程序。

要連接到遠程應用程序,請在遠程服務器上運行jstatd ,然后在本地運行VisualVM並輸入服務器的IP地址。 應該為您提供一個正在運行的Java應用程序的列表,包括您希望瀏覽的Java應用程序。 如果您在列出應用程序時遇到麻煩,可以在VisualVM網站上找到良好的文檔。

如果要查看Linux上的堆棧跟蹤,只需發出kill -SIGQUIT <java-program-pid> 那是查看代碼在哪里執行的一種方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM