Linux: получить общее использование процессора по httpd

Мне нужно отобразить общий процент использования ЦП процессами httpd на сервере в отчете 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)}'

Но данные об использовании ЦП вышеуказанной командой и данные, о которых сообщила команда top, не совпадают.

Мне нужно сообщить --> Если ЦП занят на 40%, 10% процессов httpd, 20% процессов mysqld, 10% процессов perl, то мне нужно сообщить о 10% httpd. (Предполагая, что других процессов нет).

Я видел это: получить общее использование процессора apache в (linux)

Но я понимаю, что команда ps возвращает процент ЦП, потребляемый процессом, из общего процента потребляемого ЦП. Я понимаю, что это становится беспорядочным, поэтому приведенный ниже пример должен помочь.

Если httpd потребляет 10% ЦП, который занят на 60%, то фактический вклад httpd в загрузку ЦП был ((100/60)*10) = 16,66%. Это правильно? Что еще является лучшим способом получить использование процессора группой процессов с тем же именем.


person user1263746    schedule 12.03.2013    source источник


Ответы (3)


попробуй через ssh

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

вывод:

10.5

и это для суммы памяти

ps aux | grep "httpd"  | awk '{sum1 +=$4}; END {print sum1}'
person Mustafa    schedule 28.12.2013
comment
Использование PS неверно, см. stackoverflow.com/questions/131303/ - person Dovid Bender; 08.04.2021

Я не уверен на 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);
person Vineet1982    schedule 12.03.2013

Это работает для меня на 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,cmd должно быть command, но это может быть только для OSX. Надеюсь, вы сможете работать с этим.

Удачи!

person Community    schedule 12.03.2013