實戰CPU占用過高問題定位

2021-09-09 06:40:45 字數 1238 閱讀 7767

網上學習了cpu 占用過高如何快速定位的方法後,根據現有的專案實戰一次。廢話不多說了,直接展示定位的問題的詳細步驟。

服務部署在linux伺服器,定位問題的方法,主要也是使用相關的linux命令與jdk檢視堆疊,gc日誌等相關命令。

1.問題發現

top  檢視當前伺服器各個程序執行占用cpu,記憶體等情況。

發現pid為26916程序占用cpu過高

2.問題分析

top -hp 26916,顯示乙個程序的執行緒執行資訊列表。

發現程序中以上截圖中的執行緒占用cpu過高。

如何定位具體什麼執行緒導致?

printf  '%x\n'  26929

jstack 26916 | grep '6931'  -c5 --color  獲取執行緒執行的堆疊資訊

發現是gc執行緒占用的cpu,進一步驗證結論,需要檢視gc日誌以及堆記憶體資訊。

3.問題驗證

jstat -gcutil 26916 1000   列印gc**日誌統計分析

發現fullgc的次數變化比較大,年老代記憶體已經溢位

jmap -heap 26916 檢視程序堆記憶體的使用情況

年輕代與年老代的記憶體已使用完,基本可以定位是頻繁的gc導致cpu過高。

4.問題解決

已經定位到jvm記憶體不足導致頻繁fullgc導致cpu使用過高,記憶體不足還是有大量物件無法**導致呢?對此,簡單分析了一下。

jmap -histo 26916|less   檢視程序中大物件

jvm記憶體總共500m,b和c占用了將近300m,因此,檢視程式是否有大量建立物件和string物件。

linux 分析 程序cpu占用過高

重點是檢視程序的執行緒中,哪個執行緒占用cpu過高,然後用gdb附加到程序,除錯執行緒,看是否有死迴圈或者死鎖等問題,步驟如下 先用ps grep找出該死的程序pid,比如 1706 1.gdb attach 到程序號碼 1706 2.仍然在gdb中 info threads 結果大致如下 gdb ...

生產環境cpu占用過高,分析思路和定位

linux和jdk命令一起分析。案例步驟 1線用top命令找出cpu佔比高的 top 2 ps ef或者jps進一步定位,得知時乙個怎樣的後台程式導致 jps l 3定位到具執行緒或者 ps mp 程序 o thread,tid,time 引數解釋 m顯示左右的執行緒 p程序使用cpu的時間 o該引...

如何定位占用cpu過高的執行緒

如何定位占用cpu過高的執行緒 近來發現平台應用響應越來越慢,通過top命令發現,cpu佔用率越來越高 1.首先根據top命令,發現占用cpu最高的程序pid 3075.通過ps aux grep pid命令,進一步檢視當前程序的具體資訊。2.顯示當前程序下的所有執行緒列表 找到耗時最高的執行緒ti...