JVM CPU 滿了 100 問題排查

2021-10-05 18:39:30 字數 919 閱讀 5853

突然收到運維的cpu異常告警。

如何定位是哪個服務程序導致cpu過載,哪個執行緒導致cpu過載,哪段**導致cpu過載?

步驟一、找到最耗cpu的程序

工具:top

方法:圖示:

如上圖,最耗cpu的程序pid為10765

步驟二:找到最耗cpu的執行緒

工具:top

方法:圖示:

如上圖,程序10765內,最耗cpu的執行緒pid為10804

步驟三:將執行緒pid轉化為16進製制

工具:printf

方法:printf "%x\n" 10804

10804對應的16進製制是0x2a34,當然,這一步可以用計算器。

之所以要轉化為16進製制,是因為堆疊裡,執行緒id是用16進製表示的。

步驟四:檢視堆疊,找到執行緒在幹嘛

工具:pstack/jstack/grep

方法:jstack 10765 | grep '0x2a34' -c5 --color

圖示:

如上圖,找到了耗cpu高的執行緒對應的執行緒名稱「asynclogger-1」,以及看到了該執行緒正在執行**的堆疊。

使用 jstack pid>pid.log 將執行緒棧 dump 到日誌檔案中

一定要 儲存現場日誌 儲存現場日誌 儲存現場日誌 以便後面問題分析

三步排查JVM cpu 100 問題

目錄 首先是寫乙個死迴圈的 demo,用於模擬cpu100 的場景 此處不一定達到100 只是為了演示排查過程盡量模擬 public class busycpu system.out.println result start 方法 上面已經找到最耗cpu的程序,在此基礎上,可以尋找耗cpu的執行緒 ...

JVM CPU高負載的排查辦法

1.執行top c命令,找到cpu最高的程序的id 2.執行top h p pid 這個命令就能顯示剛剛找到的程序的所有執行緒的資源消耗情況。找到cpu負載高的執行緒tid 8627,把這個數字轉換成16進製制,21b3 10進製轉16進製制,用linux命令 printf x 172 3.執行js...

磁碟滿了排查遇到的坑

之前因為要搭建hdfs,所以在某幾個伺服器直接刪除了一些程式檔案啥的為了清空間。但是也就是這一步驟出現大問題了。通過 df h檢視 磁碟占用100 通過 cd du sh 檢視與df中的磁碟暫用並不一樣 df檢視是100g du sh才16g 原來是存在程式暫用了檔案並木有真正的刪除,需要怎麼做呢。...