Linux 常見異常分析,請收好這份排查指南~
1 常用的 Load 分析方法
CPU高、Load高
-
透過
top
命令查詢佔用CPU最高的程式PID; -
透過
top -Hp PID
查詢佔用CPU最高的執行緒TID; -
對於
java
程式,使用jstack
列印執行緒堆疊資訊; -
透過
printf %x tid
列印出最消耗CPU執行緒的十六進位制;
CPU低、Load高
-
透過 top
命令檢視CPU等待IO時間,即%wa
; -
透過 iostat -d -x -m 1 10
檢視磁碟IO情況; (安裝命令yum install -y sysstat
) -
透過 sar -n DEV 1 10
檢視網路IO情況; -
透過如下命令查詢佔用IO的程式;
ps -e -L h o state,cmd | awk '{if($1=="R"||$1=="D"){print $0}}' | sort | uniq -c | sort -k 1nr
2 CPU高、Load高情況分析
-
使用
vmstat
檢視系統緯度的 CPU 負載; -
使用
top
檢視程式緯度的 CPU 負載;
2.1 使用 vmstat 檢視系統緯度的 CPU 負載
可以透過 vmstat 從系統維度檢視 CPU 資源的使用情況
格式:
vmstat -n 1 -n 1
表示結果一秒重新整理一次
[root@VM-1-14-centos ~]# vmstat -n 1procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 0 250304 163472 2154300 0 0 1 16 0 4 1 0 98 0 0 0 0 0 250412 163472 2154332 0 0 0 0 937 1439 1 1 99 0 0 0 0 0 250428 163472 2154332 0 0 0 4 980 1329 0 0 100 0 0 0 0 0 250444 163472 2154332 0 0 0 0 854 1227 0 0 99 0 0 0 0 0 250444 163472 2154332 0 0 0 68 832 1284 0 1 99 1 0 0 0 0 250016 163472 2154332 0 0 0 0 929 1389 1 1 99 0 0
返回結果中的主要資料列說明:
-
r: 表示系統中 CPU 等待處理的執行緒。由於 CPU 每次只能處理一個執行緒,所以,該數值越大,通常表示系統執行越慢。 -
b: 表示阻塞的程式,這個不多說,程式阻塞,大家懂的。 -
us: 使用者CPU時間,我曾經在一個做加密解密很頻繁的伺服器上,可以看到us接近100,r執行佇列達到80(機器在做壓力測試,效能表現不佳)。 -
sy: 系統CPU時間,如果太高,表示系統呼叫時間長,例如是IO操作頻繁。 -
wa: IO 等待消耗的 CPU 時間百分比。該值較高時,說明 IO 等待比較嚴重,這可能磁碟大量作隨機訪問造成的,也可能是磁碟效能出現了瓶頸。 -
id: 處於空閒狀態的 CPU 時間百分比。如果該值持續為 0,同時 sy 是 us 的兩倍,則通常說明系統則面臨著 CPU 資源的短缺。
-
如果 r 經常大於4,且id經常少於40,表示cpu的負荷很重。 -
如果pi,po長期不等於0,表示記憶體不足。 -
如果disk經常不等於0,且在b中的佇列大於3,表示io效能不好。
2.2 使用 top 檢視程式緯度的 CPU 負載
可以透過 top 從程式緯度來檢視其 CPU、記憶體等資源的使用情況。
top - 19:49:59 up 36 days, 23:15, 3 users, load average: 0.11, 0.04, 0.05Tasks: 133 total, 1 running, 131 sleeping, 0 stopped, 1 zombie%Cpu(s): 3.1 us, 3.1 sy, 0.0 ni, 93.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 stKiB Mem : 3880188 total, 241648 free, 1320424 used, 2318116 buff/cacheKiB Swap: 0 total, 0 free, 0 used. 2209356 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1793 mysql 20 0 1608796 236708 9840 S 6.7 6.1 83:36.23 /usr/sbin/mysqld 1 root 20 0 125636 3920 2444 S 0.0 0.1 4:34.13 /usr/lib/systemd/systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.90 [kthreadd] 4 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [kworker/0:0H] 6 root 20 0 0 0 0 S 0.0 0.0 0:15.46 [ksoftirqd/0] 7 root rt 0 0 0 0 S 0.0 0.0 0:12.02 [migration/0]
3 CPU低、Load高
問題描述
Linux 系統沒有業務程式執行,透過 top 觀察,類似如下圖所示,CPU 很空閒,但是 load average 卻非常高:
問題分析
CPU低而負載高也就是說等待磁碟I/O完成的程式過多,就會導致佇列長度過大,這樣就體現到負載過大了,但實際是此時CPU被分配去執行別的任務或空閒,具體場景有如下幾種:
場景一:磁碟讀寫請求過多就會導致大量I/O等待
場景二:MySQL中存在沒有索引的語句或存在死鎖等情況
場景三:外接硬碟故障,常見有掛了NFS,但是NFS server故障
處理辦法
-
load average 是對 CPU 負載的評估,其值越高,說明其任務佇列越長,處於等待執行的任務越多。 -
出現此種情況時,可能是由於僵死程式導致的。 可以透過指令ps -axjf檢視是否存在 D 狀態程式。 -
D 狀態是指不可中斷的睡眠狀態。 該狀態的程式無法被 kill,也無法自行退出。只能透過恢復其依賴的資源或者重啟系統來解決。
等待 I/O 的程式透過處於 uninterruptible sleep 或 D 狀態;透過給出這些資訊我們就可以簡單的查詢出處在wait狀態的程式。
ps -e -L h o state,cmd | awk '{if($1=="R"||$1=="D"){print $0}}' | sort | uniq -c | sort -k 1nr
作者:Honest1y
來源:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70013542/viewspace-2922476/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Flutter 常見異常分析Flutter
- Orillusion 正式公測開啟,這份指南請收好!
- JuiceFS CSI Driver 常見問題排查指南UI
- wireshark、異常資料分析、常見RST介紹
- 異常問題排查之旅
- 排查伺服器異常伺服器
- jmu-Java-06異常-01-常見異常Java
- 為什麼專案老夭折?這份專案管理指南請收好專案管理
- 勒索攻擊成美國夢魘?這份防範指南請收好
- druid連線池常見異常UI
- Java之常見異常 整理集合Java
- istio 常見的 10 個異常
- Java常見異常彙總 這些“攔路虎”你遇見了嗎?Java
- Linux中如何排查網路?常見的網路排查指令都有哪些?Linux
- VictoriaMetrics常見效能問題排查
- Linux常見的網路排查指令,你知道幾個?Linux
- 異常-Throwable的幾個常見方法
- Springboot專案啟動異常排查Spring Boot
- 日常Bug排查-拋異常不回滾
- linux常見命令Linux
- 常見Linux命令Linux
- Java常見知識點彙總(⑨)——異常Java
- CentOS 常見異常及解決辦法CentOS
- oracle常見異常等待——latch處理思路Oracle
- Linux基礎——BClinux8.2 排查vmcore異常當機問題Linux
- 請收好這份NLP熱門詞彙解讀
- 購買二手iPhone需要注意什麼?這份避坑指南請收好!iPhone
- .NET Core HttpClient請求異常詳細情況分析HTTPclient
- 【Android Eclipse】Eclipse 引用 library 時的常見異常AndroidEclipse
- Linux 常見問題Linux
- 常見的linux命令Linux
- 常見的Linux分支Linux
- 【3】Linux常見命令Linux
- linux sshd服務異常Linux
- 記Linux使用異常2Linux
- 一次django記憶體異常排查Django記憶體
- binlog 異常暴漲分析
- 前端JavaScript 常見的報錯及異常捕獲前端JavaScript