2013-03-12 2 views
0

PHP 보고서의 서버에서 httpd 프로세스가 사용하는 총 CPU 백분율을 표시해야합니다. 난 간부에서 다음과 같은 호출 오전리눅스 : httpd로 총 CPU 사용량을 얻으십시오

:

ps -e -o %mem,%cpu,cmd | grep httpd | awk ' {memory+=$1;cpu+=$2} END {printf("%05.2f ",memory);printf("%05.2f\n",cpu)}' 

그러나 위의 명령의보고 된 CPU 사용과 일치하지 않는 top 명령에 의해보고 된 하나.

CPU가 40 %, 10 %의 프로세스, 20 %의 mysqld 프로세스, 10 %의 perl 프로세스에서 사용 중이면 httpd의 10 %를보고해야합니다. (다른 프로세스가 없다고 가정).

나는이 보았다 get apache total cpu usage in (linux)

을하지만 ps 명령이 소비되는 CPU의 전체 비율에서 프로세스에 의해 소비 된 CPU의 비율을 반환하는 것으로 알고 있습니다. 나는 그것이 지저분 해지고 있다는 것을 이해한다. 그래서 아래 예제가 도움이된다.

httpd가 60 %에서 사용중인 CPU의 10 %를 소비하는 경우 httpd가 CPU를 사용하도록 실제로 기여한 것은 ((100/60) * 10) = 16.66 %입니다. 이 올바른지? 같은 이름의 프로세스 그룹에 의해 CPU 사용량을 얻는 가장 좋은 방법은 무엇입니까?

답변

2

가 SSH이 시도

ps aux | grep "httpd" | awk '{sum1 +=$3}; END {print sum1}' 

출력된다 :

10.5 

이 메모리의 합계

ps aux | grep "httpd" | awk '{sum1 +=$4}; END {print sum1}' 
1

는 당신이 요구하는지에 100 % 확실하지 않다, 그러나 나는 옳다 경우,이 답변이 도움이 될 수 있습니다

<?php 
    exec('ps -aux', $processes); 
    foreach($processes as $process){ 
     $cols = split(' ', ereg_replace(' +', ' ', $process)); 
     if (strpos($cols[2], '.') > -1){ 
      $cpuUsage += floatval($cols[2]); 
     } 
    } 
    print($cpuUsage); 
?> 

및 다양한 형태를 검색 한 후 또 다른 방법을 발견 :

포럼에서 검색 및 많은 방법을 시도 후,하지만 난 그것을 시도하지 않은 :

$stat1 = file('/proc/stat'); 
sleep(1); 
$stat2 = file('/proc/stat'); 
$info1 = explode(" ", preg_replace("!cpu +!", "", $stat1[0])); 
$info2 = explode(" ", preg_replace("!cpu +!", "", $stat2[0])); 
$dif = array(); 
$dif['user'] = $info2[0] - $info1[0]; 
$dif['nice'] = $info2[1] - $info1[1]; 
$dif['sys'] = $info2[2] - $info1[2]; 
$dif['idle'] = $info2[3] - $info1[3]; 
$total = array_sum($dif); 
$cpu = array(); 
foreach($dif as $x=>$y) $cpu[$x] = round($y/$total * 100, 1); 
0

이 OSX에 나를 위해 작동 :

,536,913,632 10
<?php 
    exec('ps -e -o %mem,%cpu,command | grep httpd', $output); 

    $proc_data = []; 

    foreach($output as $key => $value) { 
     // Make sure it's only path httpd and not the grep included 
     if (strstr($value, '/httpd')) { 
      $info = explode(' ', trim($value), 5); 
      unset($info[1]); 
      unset($info[2]); 
      $proc_data[] = array_merge($info); 
     } 
    } 

    echo '<pre>'; 
    print_r($proc_data); 
    echo '</pre>'; 



    // Caclulate total CPU percentages 
    $total_cpu = 0; 

    foreach ($proc_data as $key => $value) { 
     $total_cpu += $value[1]; 
    } 

    echo $total_cpu; 
?> 

이것은 bash에 대한 터미널 출력은 다음과 같습니다

MacBook-Pro:~ user$ ps -e -o %mem,%cpu,command | grep httpd 
0,2 0,0 /Applications/MAMP/Library/bin/httpd -k start 
0,0 0,0 /Applications/MAMP/Library/bin/httpd -k start 
0,1 0,0 /Applications/MAMP/Library/bin/httpd -k start 
0,0 0,0 /Applications/MAMP/Library/bin/httpd -k start 
0,1 0,0 /Applications/MAMP/Library/bin/httpd -k start 
0,0 0,0 /Applications/MAMP/Library/bin/httpd -k start 
0,0 0,0 /Applications/MAMP/Library/bin/httpd -k start 
0,0 0,0 /Applications/MAMP/Library/bin/httpd -k start 
0,0 0,0 /Applications/MAMP/Library/bin/httpd -k start 
0,0 0,0 /Applications/MAMP/Library/bin/httpd -k start 
0,0 0,0 /Applications/MAMP/Library/bin/httpd -k start 
0,0 9,0 /Applications/MAMP/Library/bin/httpd -k start 
0,0 0,0 grep httpd 

나는 ps -e -o %mem,%cpu,cmdcommand 수있다 발견하지만, 그것은 OSX 전용 일이 상점 수 있습니다. 희망을 가지고 작업 할 수 있습니다.

행운을 빈다.

관련 문제