1. 程式人生 > >linux--關於JVM CPU資源占用過高的問題排查

linux--關於JVM CPU資源占用過高的問題排查

當前 聲明 多次 查看 com file tail 線程id 線程棧

一、背景:
先執行一個java程序裏面開了兩個線程分別都在while循環做打印操作。

# java -cp ./test-threads.jar com.spiro.Main
二、現象:
通過top命令查看當前CPU情況

可以看到有個java進程占用CPU過高,下面來排查是什麽線程的什麽代碼導致CPU過高。

三、步驟
先獲得PID為2023,上圖可以看到,或者通過jps命令獲取。 執行以下命令:

# top -H -p2023
說明: -H 指顯示線程,-p 是指定進程

結果:


可以看到兩個CPU占用較高的線程,記下PID 2033和2034 ( 此處的PID即為線程ID標識) ,將其從十進制轉成十六進制表示,可通過windows自帶的計算器來轉。得到結果分別為7f1和7f2

再通過jstack命令獲取當前線程棧,可暫時保存到一個文件tempfile.txt中;

# jstack -l 2023 > tempfile.txt
在tempfile.txt中查找nid=0x7f1的線程:

可以看到我們找到的線程Thread-0,以及該線程的狀態和正在執行的代碼行,本例中顯示當前正在執行Worker類的15行。然後可去代碼中查看不合理的邏輯

四、總結
該方法很有用,多次使用該方法定位出程序中的性能問題,在此分享和記錄。
---------------------
作者:iteye_13098
來源:CSDN
原文:https://blog.csdn.net/iteye_13098/article/details/82675129

版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

linux--關於JVM CPU資源占用過高的問題排查