読者です 読者をやめる 読者になる 読者になる

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

Solaris Shell

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

$ prstat -c 1 1

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

#!/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 とした。