为了监视 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