【Linux】系統故障排查常用命令

整機:top

查看整機信息:top命令+uptime命令

 

 

 

CPU:vmstat

查看CPU:vmstat

每2秒採樣一次 一共採樣3次

procs進程信息:

  • r 是運行和等待CPU時間片的進程數,原則上1核CPU的運行隊列不要超過2,整個系統的運行隊列不能超過綜合書的2倍。否則系統壓力過大。
  • b 是等待資源的進程數,比如正在等待的磁盤IO、網絡IO等。

cpu信息:

  • us 是用戶進程消耗CPU時間百分比,us值高,用戶進程消耗CPU時間多,如果長期大於50%,需要優化程序
  • sy 是內核進程消耗的CPU時間百分比。
  • 如果us + sy > 80%說明CPU可能存在不足。
  • id 是處於空閒的CPU百分比
  • wa 是系統等待IO的CPU時間百分比
  • st 是來自於一個虛擬機偷取的CPU時間的百分比

查看所有CPU核的信息:mpstat -P ALL 【多少秒採樣一次】

 

查看每個進程使用的CPU的用量信息:pidstat -u 【多少秒採樣一次】 -p 【進程號】

ps -ef|grep java 查看java進程的進程號

 

內存:free

查看系統的內存:free -g / free -m / free (-單位)

  • 應用程序可用內存/系統物理內存 > 70 % 內存充足
  • 應用程序可用內存/系統物理內存 < 20 % 內存不足需要增加內存
  • 兩者之間,基本夠用

查看進程內存額外信息:pidstat -p 【進程號】 -r 【採樣間隔時間】

 

硬盤df

查看磁盤剩餘空間數:df / df -h(換算後的結果)

 

磁盤IO:iostat

磁盤性能評估:iostat -xdk 2 3 (2秒採樣一次 共採樣3次)

rkB/s 每秒讀取數據量kB

wkB/s 每秒寫入數據量kB

svctm:IO請求的平均服務時間 單位ms

await:IO請求的平均等待時間 單位ms 值越小性能越好

util:一秒鐘有百分之幾的時間用於IO操作,接近100%時,磁盤帶寬跑滿,需要優化程序或增加磁盤。

如果讀寫的數據量長期比較大,一定不正常,需要優化程序的讀取。svctm的值和await的值很接近,表示幾乎沒有IO等待,磁盤性能較好。如果await的值遠高於svctm,則表示IO隊列等待時間太長,需要優化程序或更換磁盤。

網絡IO:ifstat

默認本地沒有,下載ifstat

 

 

如何處理生產環境中CPU佔用過高的問題?

  1. 先用top命令找出CPU佔比最高的
  2. ps -ef或者jps進一步定位,找到進程編號
  3. 定位到具體的線程或者代碼
  4. 將需要的線程ID轉換爲16進制
  5. jstack 進程ID | grep tid(16進制英文小寫的線程ID) -A60

命令:ps -ef|grep java|grep -v grep找到進程

命令:ps -mp 進程編號 -o THREAD,tid,time

參數:

  • -m:顯式所有的線程
  • -p:pid進程使用cpu的時間
  • -o:該參數後是用戶自定義的想要查詢的字段

 

 找到進程5556中的線程5557,5557的十六進制15b5

命令:jstack 線程號 | grep tid(16進制線程號) -A60

-A60 打印出前60行

定位到Demo1.java程序中有問題的行號是6

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章