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

複数ポートのsshポートフォワードをする方法

Lオプションを増やす

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

久しぶりに手動構築した

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

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

シェルスクリプトで簡易の死活監視をしてSlackに通知する

cronで5分おきにスクリプトを実行するようにすれば簡易の死活監視のできあがり

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

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