為了監視 AIX 伺服器中的 CPU 使用情況,我使用了每 10 分鐘執行一次的以下腳本。
lparstat 2 10 > cpu
usage=$(tail -10 cpu | awk 'BEGIN {sum=0;} {sum+=$4} END{print int(100-sum/10)}')
if [[ $usage -ge 90 ]]; then
# mail the error and cpu file to admin
# displaying this for testing purposes
echo "CPU usage off the charts!!!"
cat cpu
fi
但是,如果 CPU 使用率高於 90%,我需要列出使用 CPU 的前 5 個進程。
我該如何實現這個目標?
答案1
您可以透過限制列、先按 CPU 使用率最高的方式對它們進行排序,然後截斷到前 5 個(使用head -6
,因為我們還想包含標題),以相當易讀的方式列出前 5 個:
ps -eo pcpu,pid,args | sort -k 1 -r | head -6
輸出看起來像這樣:
%CPU PID COMMAND
2.0 30531 -bash
0.0 30673 head -6
0.0 30672 sort -k 1 -r
0.0 30671 ps -eo pcpu,pid,args
0.0 30670 [flush-253:0]
您可能還想研究 GNUtop
的批次模式 ( -b
)。
答案2
對於深度潛水,最好的做法是跑步
tprof -skex sleep 10
這將為您提供一份報告,詳細說明使用高 CPU 的進程,然後深入了解函數和共享庫的使用情況。
答案3
您可以使用以下命令它將與 topas 輸出相符
ps -ef | egrep -v "STIME|$LOGNAME" | sort +3 -r | head -n 15