Perl Linux CPU使用率 Memory使用率の高いプロセスを探し出す
10月 27, 2012 — 22:26

最近尋常じゃないほどサーバリソースを喰い潰すプロセスがいるようなので調査しようと監視システムを書くことにしました。
一応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++ }

参考
Proc::ProcessTable size differences