Linux系統中CPU佔用率較高問題排查思路與解決方法

哈哈哈hh發表於2022-07-06

映象下載、域名解析、時間同步請點選  阿里雲開源映象站

這篇文章主要給大家介紹了關於Linux系統中CPU佔用率較高問題排查思路與解決方法,文中透過示例程式碼介紹的非常詳細,對大家學習或者使用Linux具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧

前言

作為 Linux 運維工程師,在日常工作中我們會遇到 Linux伺服器上出現CPU負載達到100%居高不下的情況,如果CPU 持續跑高,則會影響業務系統的正常執行,帶來企業損失。

file

很多運維的同學遇到這種狀況往往會不知所措,對於CPU過載問題通常使用以下兩種方式即可快速定位:

方法一

第一步:使用

top命令,然後按shift+p按照CPU排序

找到佔用CPU過高的程式的pid

第二步:使用

top -H -p [程式id]

找到程式中消耗資源最高的執行緒的id

第三步:使用

echo ‘obase=16;[執行緒id]’ | bc或者printf “%x\n” [執行緒id]

將執行緒id轉換為16進位制(字母要小寫)

bc是linux的計算器命令

第四步:執行

jstack [程式id] |grep -A 10 [執行緒id的16進位制]”

檢視執行緒狀態資訊

方法二

第一步:使用

top命令,然後按shift+p按照CPU排序

找到佔用CPU過高的程式

第二步:使用

ps -mp pid -o THREAD,tid,time | sort -rn

獲取執行緒資訊,並找到佔用CPU高的執行緒

第三步:使用

echo ‘obase=16;[執行緒id]’ | bc或者printf “%x\n” [執行緒id]

將需要的執行緒ID轉換為16進位制格式

第四步:使用

jstack pid |grep tid -A 30 [執行緒id的16進位制]

列印執行緒的堆疊資訊

案例分析

結合上面來做。

場景描述

生產環境下JAVA程式高CPU佔用故障排查

解決過程

1、根據top命令,shift+p,發現PID為41673的Java程式佔用CPU高達250%,出現故障。

file

2、找到該程式後,如何定位具體執行緒或程式碼呢,首先顯示執行緒列表,並按照CPU佔用高的執行緒排序:

[root@localhost ~]# ps -mp 41673 -o THREAD,tid,time | sort -rn

file

顯示結果如下:

3.將需要的執行緒TID轉換為16進位制格式

[root@localhost ~]# printf "%x\n" 41846
a376

4、最後使用jstack命令列印出該程式下面的此執行緒的堆疊資訊:

[root@localhost ~]# jstack 41673 |grep "a376" -A 30

解決辦法

1、根據top命令,shift+p,發現PID為41673的Java程式佔用CPU高達250%,出現故障。

file

2、根據pid檢視他的程式看看是什麼服務佔用這麼高

ps -ef |grep -v grep | grep 41673

file

3、檢視到是一個java程式佔用這麼高,然後看看有沒有用,沒有用的話就殺掉它

kill -9 41673

4、再次top檢視cpu整體就降下來了。

原文連結:https://blog.csdn.net/liu_chen_yang/article/details/124320046


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70003733/viewspace-2904483/,如需轉載,請註明出處,否則將追究法律責任。

相關文章