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 つに切り捨てることで、上位 5 つを読みやすい方法でリストできます (head -6
ヘッダーも含めたいため を使用します)。
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]
top
GNUのバッチ モード ( )も調べてみるといいでしょう-b
。
答え2
深く掘り下げるには、ここでの最良の行動は、
tprof -skex sleep 10
これにより、CPU を多く使用しているプロセスの詳細を示すレポートが生成され、関数および共有ライブラリ別の使用状況を詳細に確認できます。
答え3
以下のコマンドを使用するとtopasの出力と一致します
ps -ef | egrep -v "STIME|$LOGNAME" | sort +3 -r | head -n 15