進程cpu過高問題排查

一,結合linux基本命令和jmap,jstack等工具。 

  1. 根據top命令,發現PID爲28555的Java進程佔用CPU高達200%,出現故障。

 

  1. 通過ps aux | grep PID命令,可以進一步確定是哪個進程出現了問題。怎麼定位到具體線程或者代碼呢? 
  2. 顯示當前java進程的線程列表

ps -mp pid -o THREAD,tid,time

從中可以找到了耗時最高的線程28802。 

  1. 其次將需要的線程ID轉換爲16進制格式:

printf "%x\n" tid

 

  1. 本地打印線程的堆棧信息*(注意主工程由於{}JVM Xms{}設置非常大,不可線上運行時執行!*

jstack pid |grep tid -A 30

這樣,對應異常找到出現問題的代碼。 

 

二,linux常用確認服務狀態命令。

統計tcp連接狀態: netstat -n | awk '/^tcp/ {++S[$NF]} END{for(a in S) print a, S[a]}'

統計用戶進程當前操作句柄數:lsof -n|awk '{print $2}|'|sort|uniq -c |sort -nr|more

統計用戶進程內部執行的線程數:ps -eLf|grep java|wc --l

查看運行時進程參數設置:cat /proc/pid/limits,cpuset及coredump_filter

查看當前某端口連接數:netstat -nat|grep -i  "80" |wc -l 

對連接的IP按連接數量進行排序:netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n (運維操作已放棄netstat,改爲ss命令入侵更輕量)

Tcpdump訪嗅訪問數據包最高請求:tcpdump -i eth0 -tnn dst port 80 -c 1000

發佈了91 篇原創文章 · 獲贊 3 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章