CPU使用率の高いプロセスを特定するシェルスクリプト

公開日時

サーバでアラートが起きた際にすぐに調査ができない場合、sarコマンドを使うとアラート発生時の負荷状況の調査が行える。

ただ、CPU使用率が高くなっていたということは分かっても、どのプロセスが原因なのかは特定できない。

そこで、CPU負荷が高くなった際に、原因のプロセスを特定する簡易シェルスクリプトを作る。

CPU使用率が90%を超えるプロセスがあった場合はログに記録する。

#!/bin/bash

CPU_USAGE=`ps -A -O pcpu --sort -pcpu | head -n 2 | tail -n 1 | awk '{ print $2 }'`
if [ $CPU_USAGE -ge 90 ]; then
  date >> cpu_usage.log
  ps -A -O pcpu --sort -pcpu | head -n 6 | tail -n 5 >> cpu_usage.log
fi

このスクリプトに実行権限を付与して、

chmod +x cpu_usage.sh
touch cpu_usage.log

cronで1分おきに実行するようにすれば、過去に起きたCPU負荷の原因が特定できるようになる。

crontab -e

* * * * * $HOME/cpu_usage.sh

参考


Related #linux

GCP VMインスタンスのSSHポートを変更した

Network Internet Egress from Americas to EMEA

dfコマンドで簡易のディクス容量監視をする

凝ったことをしなければシェルスクリプトは手軽で便利

WSL2のUbuntuにsshできるようにする

ポートフォワードとファイアウォールの設定をした

1つのサーバで複数のGitHub DeployKeyを切り替えて使う

ssh/configとgit remoteの設定を変更する

wsl2上のUbuntuにrubyの開発環境を構築する

久しぶりに手動構築した

起動中のプロセスの環境変数を確認

cat /proc/{id}/environで確認できる