簡體   English   中英

如何正確分析java線程轉儲?

[英]How to analyze a java thread dump correctly?

我想更多地了解 java 線程轉儲。 我正在使用 JBOSS EAP 4.3。

目前我在我的一個環境中面臨性能問題。 突然CPU利用率上升到700%。 我獲取了線程轉儲,它是一個巨大的文件。

我在我的線程轉儲中發現了很多下面等待的線程條目。

"http-172.16.101.99-8080-4" daemon prio=10 tid=0x0000000059d16800 nid=0x5803 in Object.wait() [0x00002b00cf683000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on <0x000000070c1eef60> (a org.apache.tomcat.util.net.JIoEndpoint$Worker)
    at java.lang.Object.wait(Object.java:485)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.await(JIoEndpoint.java:416)
    - locked <0x000000070c1eef60> (a org.apache.tomcat.util.net.JIoEndpoint$Worker)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:442)
    at java.lang.Thread.run(Thread.java:662)

我想從上面的等待線程中了解。 是什么導致 CPU 使用率上升?

有 6 種不同的線程狀態:

  1. 新的
  2. 等待
  3. TIMED_WAITING
  4. 可運行
  5. 封鎖
  6. 終止

NEW、WAITING、TIMED_WAITING、BLOCKED、TERMINATED狀態線程消耗CPU。 只有處於 RUNNABLE 狀態的線程才會消耗 CPU。 因此,如果您的應用程序的 CPU 正在飆升,您應該只關注 RUNNABLE 狀態線程堆棧跟蹤。

捕獲線程轉儲以及“top -H -p”輸出將幫助您識別導致 CPU 峰值的線程。 這是一篇很好的文章,它向您介紹了如何對 CPU 峰值進行故障排除。

暫無
暫無

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

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