如何找到 Java 進程中哪個線程占用了大量 CPU 處理時間

本文的目的是在 Java進程中確定哪個線程正在佔用CPU的時間。 當您的系統 CPU 負載居高不下時,這是一種有用的故障排除技術。

下面是詳細步驟:

1. 首先確定進程的 ID ,可以使用 jps -v 或者 top 命令直接查看

2. 查看該進程中哪個線程佔用大量 CPU,執行 top -H -p [PID] 結果如下:

如何找到 Java 進程中哪個線程佔用了大量 CPU 處理時間

可以發現編號為 350xx 的共有 9 個線程佔用了 100% 的 CPU,好,接下來咱們隨便取一個線程 ID ,假設我們想看編號為 35053 這個線程。

首先將 35053 轉成 16 進制是 88ED (可以用開源中國在線工具轉換)

3. 接下來我們將進程中的所有線程輸出到一個文件中,執行:jstack [PID] > jstack.txt

4. 在進程中查找對應的線程 ID,執行:cat jstack.txt | grep -i 88ED

加群:874811168免費獲取資料 幫助大家在學習Java的道路上披荊斬棘。

結果是:

"HTTP Request From : /xxxx/blog/323432(120.27.143.239)" #266 daemon prio=5 os_prio=0 tid=0x00007fcda4146800 nid=0x88e runnable [0x00007fcd54178000]

由此可以看出在請求 /xxxx/blog/323432 鏈接的時候,服務器的處理線程佔用了 100% 的 CPU。

找到問題後,接下來去解決就好了!

喜歡的朋友點點關注 後臺私信回覆“Java”即可免費獲取資料一份



分享到:


相關文章: