最近尋常じゃないほどサーバリソースを喰い潰すプロセスがいるようなので調査しようと監視システムを書くことにしました。
一応PerlではProc::ProcessTableと呼ばれるモジュールにてプロセスを監視できるようなのでサクッとCPU使用率の高いプロセスを見つけ出すプログラムを書いてみました。
#!/usr/bin/perl use warnings; use strict; use Proc::ProcessTable; my $Processtable = new Proc::ProcessTable; foreach my $item (@{$Processtable->table}){ my $pctcpu = sprintf("%5.1f", $item->pctcpu); my $pctmem = sprintf("%5.1f", $item->pctmem); if($pctcpu > 50){ print $item->pid ." ". getpwuid($item->uid) ." " . $pctcpu . " ". $pctmem ." ". $item->cmndline . "\n"; } }
実行するとちゃんとCPU使用率の高いプロセスを特定してくれました。
# perl ProcessKill.pl 3509 root 100.0 0.0 155 perl -e while (1) { $i++ }
最近のコメント