Solaris で暴走プロセスを KILL するウォッチャスクリプトを作るには

March 20, 2008

CPU リソースを食いつぶすプロセスがあったら、KILL する監視用スクリプトを書いてみる。
Linux だと top が有名だが、Solaris では標準ではない。prstat を使う。prstat を単に実行して標準出力するには

$ prstat -c 1 1

とすればよい。後はターゲットプロセス名で grep して awk で cpu 使用率を取り出して合計値が閾値を超えたら、プロセスを KILL -KILL するようにする。
引数: 対象プロセス名(grep してるだけなので不十分) 暴走したとみなすしきい値

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/bash
target=$1
threshold=$2
exp=0
for u in `prstat -c 1 1 | grep $target | awk '{print $9}' | sed -e "s/%$//"`
do
exp="${exp}+${u}"
done
cpu=`echo "s=${exp}; s/1" | bc`
if \[ $cpu -lt $threshold \]
then
echo "no driving $target. (cpu usage: $cpu%)"
exit 0
fi
ps -ef | grep $target | awk '{print $2}' | xargs kill -KILL
echo "killed driving $target. (cpu usage: $cpu%)"

※bc で実数の計算をしているが、scale=0; としても小数値が帰ってしまうので s/1 とした。

tilfin freelance software engineer