伺服器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詳細的記憶體佔比