生產上遇見linux異常變慢如何排查?
基本上出現慢的問題,90%的可能都是cpu或者內存出現了問題。使用命令查看定位機器的性能細節。
1、查看整體機器性能
使用top命令。
1.1 cpu
1.2 mem
1.3 id=idle 機器空閒率,越高越好
1.4 load average:系統負載。後面 三個值,分別是系統1分鐘,5分鐘,15分鐘的系統平均負載率。通過計算算出平均負載率。
1.5 command
top命令如何退出,使用q,這裏不要使用ctrl+c強行中斷退出。
2、乞丐版本uptime(低配版的top)
3、內存
free free -g free -m(一般使用free -m)
4、硬盤
df 或者df -h (df:disk free)磁盤剩餘空間 h:human人類看的懂方式
5、cpu 包含但不限於
vmstat -n 2 3(n :代表數字 2:每2秒刷一次 3:3條記錄)
6、磁盤I/O
磁盤I/O高 讀寫慢 八成是大sql導致系統慢了。
iostat - xdk 2 3
就看一個參數,%util%。如果長期高於>80%,要對sql進行調優處理。r/s w/s 代表讀寫數據。
排查linux慢的問題基本就是以上操作,是不是不難呢。但是用過逼格就有點上去了。
接下來看看一次生產環境CPU佔用過高問題的排查
(結合Linux和JDK命令一塊分析)
1、先用top命令找出CPU佔比最高的
看到一個叫做id=3928 名稱爲java的進程CPU佔用賊高,不知道搞雞毛。
2、ps -ef或者jps進一步定位,得知是一個怎麼樣的一個後臺程序
3、定位到具體線程或者代碼
ps -mp 進程 -o THREAD,tid,time
上圖我們就可以根據進程查看到真正佔用CPU資源就是id=3929的線程
4、將需要的線程ID轉換爲16進制格式(英文小寫格式)
printf “%x\n” 有問題的線程ID或者使用計算器計算得到
將id=3929 轉換爲二進制。 f59
5、 jstack 進程ID | grep tid(16進制線程ID小寫英文) -A60
jstack 3928 | grep F59 -A60(打印60行記錄)
這裏由於記錄文章時之前的異常沒有找到 ,自己手寫了一個while(true)死循環來佔用,截圖爲我的測試代碼。方法沒問題。
====================================================