- 締切済み
UNIXのCPU負荷の自動検知法
HP-UX11ですが、1日に1回、1分間だけCPUの負荷が100% 近くになってしまいとても困っています。 原因となるプロセス名はわかっているので本来はそのバグ を修正すべきなのでしょうが、事情がありそれがなかなか 出来ない状態なので、CPUに負荷がかかったらそのプロセス を殺すとしくみを自動検知で作りたいのですが、その検知 方法がわかりません。 PSをポーリングするというのはそ れ自体が負荷となるのでNGです。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- shuyamakawa
- ベストアンサー率67% (111/164)
かなり後ろ向きな対策ですが...。 問題のプロセスのプロセスIDが変わらないのであれば(常駐しているのであれば)、「renice +20 プロセスID」 として優先を下げてしまうというのはどうでしょう?(起動する場所がわかっていれば「/usr/bin/nice -n 20 コマンド」でもいいです。)また、root権限があれば他のプロセスの優先のほうををあげる手もあります。 csh上で「limit cputime 60」とした環境から起動すると、CPU時間に制限をつけることができます。(制限を超えるとシグナルがとんできて、何もしなければ終わります。) いちおうSCOのUnixWareのマニュアルで確認しました。(SystemV系です。) 機種依存があるかもしれないので試す場合はマニュアルで確認してみてください。
1日に1回そのプロセスが実行されるということは、 1.起動される時間が固定の場合 cronに登録されていないか確認し 登録されている場合は、削除する。 2.shを作成し30秒ぐらいの間隔で プロセス監視し、プロセスがあったらkillする。 <shの例> #!/bin/sh while [ 1 ] do sleep 30; PS_ID=`ps -ef | grep xxx` if [ X$PS_ID -eq X ] then ; else #ここでプロセスIDを取得しkillする kill xx; fi done こんな感じでしょうか? これならPSでのポーリングでもそれほど負担にならないと おもいます。
補足
ご回答ありがとうございます。 ただ、このプロセスがあれば必ず悪さするという事でも なく何かのタイミングで起こるようです。 ですのでCPUの負荷を検知したいのですが・・・。
お礼
ありがとうございます。 試してみます。