특정 시간에 모든 프로그램의 평균 로드

특정 시간에 모든 프로그램의 평균 로드

저는 "성능 테스트"를 수행할 Linux 도구를 찾고 있습니다. 동일한 기능을 가진 프로그램이 두 개(또는 그 이상) 있습니다. 버전을 서로 비교하기 위해 특정 시간(30초에서 5분 사이)에 버전을 실행한 다음 실행 중인 시스템에 있는 전체 시간에 대한 로드 평균을 확인하고 싶습니다(예: 내 프로그램 foo는 시스템의 2분 % 시간에 약 30초). 이를 편리한 방법으로 수행하려면 다양한 버전이 하나의 ID를 가진 하나의 프로그램으로 구성되지 않고 프로그램 그룹으로 구성되어 있기 때문에 전체 공통 시스템을 보는 것이 좋습니다. 따라서 출력을 로그 파일에 기록할 수 있으면 관심 있는 프로그램을 수동으로 검색할 수 있습니다.

그러한 프로그램을 알고 사용 방법을 알려줄 수 있는 사람이 있습니까?

답변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;
};

관련 정보