1. 程式人生 > >伺服器CPU異常原因及如何排查

伺服器CPU異常原因及如何排查

1.檢視伺服器CPU飆升卡爆,最後發現是伺服器在跑挖礦程式,CPU使用率奇高。在此總結一下排查經過。

  首選發現CPU飆升,伺服器卡死,檢視異常程序PID
    #top                          #檢視各個程序的cpu使用情況,預設按cpu使用率排序

  2.結束掉異常程序

    #kill -9/15 pid                        #終止指定程序,-9 是強制終止程序,-15 是軟結束程序

  3.發現剛結束的異常程序又自動啟動

    #ls -l /proc/$PID/exe                   #檢視PID啟動檔案的路徑
    #ls -l /proc/$PID/cwd                   #檢視PID執行目錄的路徑

  4.刪除執行檔案,但是15s後又自動恢復檔案運行了。這裡可以肯定的是有定時器不斷下載檔案和啟動程式。

    #在定時器配置目錄檢視是否存在異常定時器配置 /var/spool/cron/root 和/etc/crontab 和/etc/rc.lcoal
    #tail -f /var/log/cron                   #檢視定時器啟動日誌,跟蹤自啟動程式

  5.發現/var/spool/cron/root 裡面配置了一個不斷下載的定時器任務,刪除定時器,問題解決。

  如何查詢一個程序資訊
  檢視所有程序資訊
    #top                         #檢視各個程序的cpu使用情況,預設按cpu使用率排序
    #ps aux | less                       #顯示所有執行中的程序,q退出
  根據程序名稱查詢PDI
    #ps -aux|grep test.jar | grep -v grep            #檢視test.jar程序號
    #ps -ef|grep test.jar | grep -v grep            #檢視test.jar程序號
  檢視執行緒資訊
    #top -Hp pid                          #檢視該程序下各個執行緒的cpu使用情況
    #printf "%x\n" pid                       #將執行緒pid轉換為十六進位制 8f7
    #jstack pid | grep 8f7                       #檢視pid程序裡面的執行緒資訊,執行緒Id為十六進位制
  檢視程序相關檔案:/proc 目錄是存放系統程序檔案資訊的,可以檢視到程序詳細資訊。
    #lsof -p pid                         #檢視該程序開啟的檔案
    #cat /proc/pid/maps                      #檢視pid執行緒記憶體分配
    #ls -l /proc/$PID/exe                     #檢視PID啟動檔案的路徑
    #ls -l /proc/$PID/cwd                     #檢視PID執行目錄的路徑
    #cat /proc/$PID/status                  #檢視PID詳細的記憶體佔比