特定の時間にすべてのプログラムの平均負荷

特定の時間にすべてのプログラムの平均負荷

私は「パフォーマンステスト」を実行するLinuxツールを探しています。同じ機能を持つプログラムが2つ(またはそれ以上)あります。バージョンを互いに比較するために、特定の時間(30秒から5分の間)でバージョンを実行してから、実行中のシステムの合計時間の負荷平均を確認したいと思います(例:私のプログラムfooはシステムの2分%に約30秒)。これを便利な方法で実行するには、さまざまなバージョンが1つのIDを持つ1つのプログラムで構成されるのではなく、プログラムのグループで構成されているため、共通のシステム全体を見ることをお勧めします。したがって、出力をログファイルに記録できる場合は、目的のプログラムを手動で検索できます。

そのようなプログラムを知って使い方を教えてくれる人はいますか?

答え1

工程別統計は以下で確認できます。

/proc/$PID/stat

man proc以下を実行して検索し、マニュアルを読むことができます/proc/[pid]/stat

man -P'less +/\\\/proc\\\/\\\[pid\\\]\\\/stat' proc

...

(14)utime%luこのプロセスがユーザーモードでスケジュールされた時間(クロックサイクル)(sysconf(_SC_CLK_TCK)で割った)。これには、guest_timeフィールドを認識しないアプリケーションが計算でこの時間を失わないようにguest_time(仮想CPUを実行するのにかかる時間、以下を参照)が含まれます。

(15)stime%luこのプロセスがカーネルモードで予約された時間(クロックサイクル)(sysconf(_SC_CLK_TCK)で割った)。

気づく:たとえば、ツールが多数の子プロセス(サブプロセス)を生成する場合は、他のフィールドが重要になる可能性があります。

たとえば、タスクを実行する高速Perlがありますが、遅延時間は1秒に固定されています。

#!/usr/bin/perl -w

my ( $lut, $lst ) = ( 0, 0 );
my $pid = $ARGV[0] or die "No pid";

open FH, "</proc/$pid/stat" or die "Can't open \`\`/proc/$pid/stat''";
open UT, "</proc/uptime"    or die "Can't open \`\`/proc/uptime''";

sub getvals {
    seek FH, 0, 0;
    seek UT, 0, 0;
    my $st  = <FH>;
    my $ut  = <UT>;
    my $out = $lut;
    my $ost = $lst;
    $lut = ( split " ", $ut )[0] * 100;
    $lst = eval( join( "+", ( split " ", $st )[ 13, 14 ] ) );
    return $lut - $out, $lst - $ost;
}
getvals;
$| = 1;
while (1) {
    sleep 1;
    printf "%7.2f%%\n", eval sprintf "100/%s*%s", getvals;
};

関連情報