Linux服務器負載暴增和故障排查完全指南

類別 監控命令 描述 備註
內存瓶頸 free 查看內存使用  
  vmstat 3(間隔時間) 100(監控次數) 查看swap in/out詳細定位是否存在性能瓶頸 推薦使用
  sar -r 3 和free命令類似,查看內存的使用情況,但是不包含swap的情況  
cpu瓶頸 top -H 按照cpu消耗高低進行排序  
  ps -Lp 進程號 cu 查看某個進程的cpu消耗排序  
  cat /proc/cpuinfo |grep ‘processor’|wc -l 查看cpu核數  
  top 查看cpu總體消耗,包括分項消耗如user,system,idle,nice等消耗  
  top 然後shift+h:顯示java線程,然後shift+M:按照內存使用進行排序;shift+P:按照cpu時間排序;shift+T:按照cpu累計使用時間排序

 

多核cpu,按“1”進入top視圖

   
  sar -u 3(間隔時間) 查看cpu總體消耗佔比  
  sar -q 查看cpu load  
   top -b -n 1 | awk '{if(NR<=7)print;else if($8=="D"){print;count++}}END{print "Total status D:"count}' 計算在cpu load裏面的uninterruptedsleep的任務數量 uninterruptedsleep的任務會被計入cpu load,如磁盤堵塞
網絡瓶頸 cat /var/log/messages 查看內核日誌,查看是否丟包  
  watch more /proc/net/dev 用於定位丟包,錯包情況,以便看網絡瓶頸 重點關注drop(包被丟棄)和網絡包傳送的總量,不要超過網絡上限
  sar -n SOCK 查看網絡流量  
  netstat -na|grep ESTABLISHED|wc -l 查看tcp連接成功狀態的數量 此命令特別消耗cpu,不適合進行長時間監控數據收集
  netstat -na | awk '{print $6}'|sort|uniq -c|sort -nr 看tcp各個狀態數量  
  netstat -i 查看網絡錯誤  
  ss state ESTABLISHED| wc -l 更高效地統計tcp連接狀態爲ESTABLISHED的數量  
  cat /proc/net/snmp 查看和分析240秒內網絡包量,流量,錯包,丟包 用於計算重傳率tcpetr=RetransSegs/OutSegs
  ping ip 測試網絡性能  
  traceroute ip 查看路由經過的地址 常用於定位網絡在各個路由區段的耗時
  dig 域名 查看域名解析地址  
  dmesg 查看系統內核日誌  
磁盤瓶頸 iostat -x -k -d 1 詳細列出磁盤的讀寫情況 當看到I/O等待時間所佔CPU時間的比重很高的時候,首先要檢查的就是機器是否正在大量使用交換空間,同時關注iowait佔比cpu的消耗是否很大,如果大說明磁盤存在大的瓶頸,同時關注await,表示磁盤的響應時間以便小於5ms
  iostat -x 查看系統各個磁盤的讀寫性能 重點關注await和iowait的cpu佔比
  iotop 查看哪個進程在大量讀取IO 一般先通過iostat查看是否存在io瓶頸,再定位哪個進程在大量讀取IO
  df -hl 查看磁盤剩餘空間  
  du -sh 查看磁盤使用了多少空間  
應用瓶頸 ps -ef | grep java 查看某個進程的id號  
  ps -ef | grep httpd| wc -l 查看特定進程的數量  
  cat ***.log | grep ***Exception | wc -l 統計日誌文件中包含特定異常數量  
  jstack -l pid 用於查看線程是否存在死鎖  
  awk '{print $8}' 2017-5-22-access_logo|egrep '301|302'| wc -l 統計log中301、302狀態碼的行數,$8表示第八列是狀態碼,可以根據實際情況更改 常用於應用故障定位
  grep ‘wholesaleProductDetailNew’ cookie_log | awk ‘{if($10==”200″)}’print}’ | awk ‘print $12′ | more 打印包含特定數據的12列數據  
  grep “2017:05:22″ cookielog | awk ‘($12>0.3){print $12 “–” $8}’ | sort > 目錄地址 對apache或者nginx訪問log進行響應時間排序,$12表示cookie log中的12列表示響應時間 用於排查是否是由於是某些訪問超長造成整體的RT變長
  grep -v ‘HTTP/1.1″ 200′ 取出非200響應碼的URL  
  pgm -A -f 應用集羣名稱 “grep “’301 ‘ log文件地址 | wc -l 查看整個集羣的log中301狀態碼的數量  
  ps -efL | grep [PID] | wc -l 查看某個進程創建的線程數  
  find / -type f -name “*.log” | xargs grep “ERROR” 統計所有的log文件中,包含Error字符的行 這個在排查問題過程中比較有用
  jstat -gc [pid] 查看gc情況  
  jstat -gcnew [pid] 查看young區的內存使用情況,包括MTT(最大交互次數就被交換到old區),TT是目前已經交換的次數  
  jstat -gcold 查看old區的內存使用情況  
  jmap -J-d64 -dump:format=b,file=dump.bin PID dump出內存快照 -J-d64防止jmap導致虛擬機crash(jdk6有bug)
  -XX:+HeapDumpOnOutOfMemeryError 在java啓動時加入,當出現內存溢出時,存儲內存快照  
  jmap -histo [pid] 按照對象內存大小排序 注意會導致full gc
  gcore [pid] 導出完成的內存快照 通常和jmap -permstat /opt/**/java gcore.bin 一起使用,將core dump轉換成heap dump
  -XX:HeapDumpPath=/home/logs -Xloggc:/home/log/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps 在Java啓動參數中加入,打印gc日誌  
  -server -Xms4000m -Xmx4000m -Xmn1500m -Xss256k -XX:PermSize=340m -XX:MaxPermSize=340m -XX:+UseConcMarkSweepGC 調整JVM堆大小 xss是棧大小
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章