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