모든 프로그램의 특정 시간 동안 평균 부하

모든 프로그램의 특정 시간 동안 평균 부하

저는 "성능 테스트"를 수행하기 위해 Linux 도구를 찾고 있습니다. 동일한 작업을 수행하는 두 개 이상의 버전의 프로그램이 있습니다. 버전을 서로 비교하기 위해 특정 시간(30초에서 5분 사이) 동안 이를 실행한 다음 전체 시간 동안 실행 중인 시스템에서 로드 평균을 확인하고 싶습니다(예: 내 프로그램 foo는 시스템의 약 30%를 2분 안에 필요로 함) 시간). 편안한 방법으로 이를 수행하려면 전체 평균 시스템을 보는 것이 좋을 것입니다. 왜냐하면 다양한 버전이 프로그램 모음이 아닌 하나의 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(가상 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;
};

관련 정보