C/C++로 프로그램을 작성하여 Linux에서 맨 위 명령처럼 작동 시키려고합니다. 몇 가지 조사를했으며 프로세스의 CPU 사용량을 계산하는 방법을 이미 알고 있습니다. 현재 시간과 몇 초 후에/proc/[PID]/stat에서 stime + utime을 계산하여 CPU 사용량을 얻을 수 있습니다. 그런 다음 stime + utime 차이를 계산하고 가동 시간 차이가있는 결과를 나누면 CPU 사용률이됩니다. 단일 프로세스/다중 스레드 프로세스에서 매우 쉽습니다.리눅스에서 다중 프로세스 응용 프로그램의 CPU 사용량을 계산하는 방법
문제는 다중 프로세스로 작동하는 httpd와 같은 경우입니다. 웹 서버가 바쁠 때, httpd는 자식 프로세스를 포크하여 요청들을 처리합니다. 그런 다음 총 프로세스 수를 계산해 봅니다. 500이라고 가정합니다. 프로세스의 CPU 사용량을 계산하려고하지만이를 요약하면 1 개의 CPU 사용량 만 표시됩니다. 하지만 내가 위에서 말한 것처럼 알고리즘을 수행하면 몇 초 후에 < 500으로 프로세스 수가 감소 할 때 계산이 이렇게 될 것이므로 음수 값을 얻습니다. (예를 들어, 임의의 숫자를 선택하면됩니다. 위의 예를 보면, STIME + UTIME의 델타 프로세스의 수부터 음의 값에서 결과가 감소됩니다
Uptime: 155123, No of processes : 500, Stime + Utime total of 500 processes : 3887481923874
Uptime: 155545, No of processes : 390, Stime + Utime total of 390 processes : 2887123343874
, 그리고 몇 밀리 초 후에 낮은 값을 제공 :) 당신에게 간단한 설명을 제공합니다. 난 단지 알고 싶어, 같은 다른 프로세스가 이런 식으로 행동을 계산할 수 있습니까? 고맙습니다.
프로세스 집합을 어떻게 알 수 있습니까? 해당 프로세스 그룹에 의해? 프로그램 이름으로? –
먼저, 주요 부모 프로세스를 얻습니다. 나는 그것이 ppid 1을 가지고 있고 그것의 pid 1227을 말하자. 그 다음 ppid 1227이있는/proc/디렉토리 전체를 찾는다./proc/pid1/stat에 ppid 1227이 있으면 그 utime과 stime을 다음에 추가한다. 1227 utime과 stime. –