0

サーバー上のhttpdプロセスによって使用されたCPUの合計パーセンテージをphpレポートに表示する必要があります。

私はexecから次のように呼んでいます:

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使用率は一致していません。

報告する必要があります->CPUが40%、httpdプロセスの10%、mysqldプロセスの20%、perlプロセスの10%でビジー状態の場合、httpdの10%を報告する必要があります。(他のプロセスがないと仮定します)。

私はこれを見ました:(Linux)でapacheの合計CPU使用率を取得します

しかし、psコマンドは、消費されたCPUの合計パーセンテージのうち、プロセスによって消費されたCPUのパーセンテージを返すことを理解しています。乱雑になっていることを理解しているので、以下の例が役立つはずです。

httpdがCPUの10%を消費していて60%でビジーである場合、CPUをビジーにするためのhttpdの実際の寄与は((100/60)* 10)= 16.66%でした。これは正しいです?同じ名前のプロセスのグループによるCPU使用率を取得するための他の最良の方法は何ですか。

4

3 に答える 3

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);
于 2013-03-12T08:30:51.123 に答える
0

これは私にとってOSXで機能します:

<?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のみのものかもしれません。これで作業できることを願っています。

幸運を!

于 2013-03-12T09:10:54.350 に答える