linux機器變慢排查方式以及CPU佔用過高排查優化

生產上遇見linux異常變慢如何排查?
基本上出現慢的問題,90%的可能都是cpu或者內存出現了問題。使用命令查看定位機器的性能細節。

1、查看整體機器性能
使用top命令。
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)
uptime最快查看整機機器性能
3、內存
free free -g free -m(一般使用free -m)
free多個命令
4、硬盤
df 或者df -h (df:disk free)磁盤剩餘空間 h:human人類看的懂方式
磁盤剩餘空間
5、cpu 包含但不限於
vmstat -n 2 3(n :代表數字 2:每2秒刷一次 3:3條記錄)
查看cpu
6、磁盤I/O
磁盤I/O高 讀寫慢 八成是大sql導致系統慢了。
iostat - xdk 2 3
查看磁盤I/O情況
就看一個參數,%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)死循環來佔用,截圖爲我的測試代碼。方法沒問題。

====================================================

那同理是否可以舉一反三查看內存呢?

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