鏡像下載、域名決議、時間同步請點擊 阿里云開源鏡像站
這篇文章主要給大家介紹了關于Linux系統中CPU占用率較高問題排查思路與解決方法,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Linux具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
前言
作為 Linux 運維工程師,在日常作業中我們會遇到 Linux服務器上出現CPU負載達到100%居高不下的情況,如果CPU 持續跑高,則會影響業務系統的正常運行,帶來企業損失,

很多運維的同學遇到這種狀況往往會不知所措,對于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%,出現故障,

2、找到該行程后,如何定位具體執行緒或代碼呢,首先顯示執行緒串列,并按照CPU占用高的執行緒排序:
[root@localhost ~]# ps -mp 41673 -o THREAD,tid,time | sort -rn

顯示結果如下:
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%,出現故障,

2、根據pid查看他的行程看看是什么服務占用這么高
ps -ef |grep -v grep | grep 41673

3、查看到是一個java行程占用這么高,然后看看有沒有用,沒有用的話就殺掉它
kill -9 41673
4、再次top查看cpu整體就降下來了,
原文鏈接:https://blog.csdn.net/liu_chen_yang/article/details/124320046
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/498511.html
標籤:Linux
