Как получить использование процессора и оперативной памяти без exec? - PullRequest
28 голосов
/ 16 января 2011

Как VBulletin получает системную информацию без использования exec?Есть ли какая-либо другая информация, которую я могу получить о сервере без exec?Меня интересует:

  • используемая полоса пропускания
  • тип системы
  • скорость процессора / использование / количество
  • использование ОЗУ

Ответы [ 4 ]

44 голосов
/ 16 января 2011

Использование PHPSysInfo библиотека

phpSysInfo - PHP-скрипт с открытым исходным кодом, который отображает информацию о хосте, к которому осуществляется доступ. Он будет отображать такие вещи, как:

  • Uptime
  • CPU
  • SCSI, IDE, PCI
  • Ethernet
  • Floppy
  • Информация о видео

Он анализирует напрямую /proc и не использует exec.


Другой способ - использовать Linfo . Это очень быстрый кроссплатформенный php-скрипт, который очень подробно описывает хост-сервер, предоставляя такую ​​информацию, как использование оперативной памяти, дисковое пространство, RAID-массивы, оборудование, сетевые карты, ядро, операционная система, samba / cups / truecrypt статус, временные данные, диски и многое другое.

5 голосов
/ 28 июня 2016

Это то, что я использую на серверах Linux.Он по-прежнему использует exec, но другие вопросы указывают здесь как дубликаты, и для них нет [хорошего] предложения.Он должен работать на каждом дистрибутиве, но если это не так, попробуйте поработать со смещением $get_cores + 1.

Процессор в процентах от используемых ядер (5 мин. В среднем):

$exec_loads = sys_getloadavg();
$exec_cores = trim(shell_exec("grep -P '^processor' /proc/cpuinfo|wc -l"));
$cpu = round($exec_loads[1]/($exec_cores + 1)*100, 0) . '%';

ОЗУ в процентах от общего использования (в реальном времени):

$exec_free = explode("\n", trim(shell_exec('free')));
$get_mem = preg_split("/[\s]+/", $exec_free[1]);
$mem = round($get_mem[2]/$get_mem[1]*100, 0) . '%';

ОЗУ в ГБ (в реальном времени):

$exec_free = explode("\n", trim(shell_exec('free')));
$get_mem = preg_split("/[\s]+/", $exec_free[1]);
$mem = number_format(round($get_mem[2]/1024/1024, 2), 2) . '/' . number_format(round($get_mem[1]/1024/1024, 2), 2);

Вот что находится в массиве $get_memЕсли вам нужно рассчитать другие аспекты:

[0]=>row_title [1]=>mem_total [2]=>mem_used [3]=>mem_free [4]=>mem_shared [5]=>mem_buffers [6]=>mem_cached

Бонус, вот как получить время работы:

$exec_uptime = preg_split("/[\s]+/", trim(shell_exec('uptime')));
$uptime = $exec_uptime[2] . ' Days';
3 голосов
/ 16 апреля 2015
<?php
function get_server_load() 
{
    $load=array();
    if (stristr(PHP_OS, 'win')) 
    {
        $wmi = new COM("Winmgmts://");
        $server = $wmi->execquery("SELECT LoadPercentage FROM Win32_Processor");  
        $cpu_num = 0;
        $load_total = 0;
        foreach($server as $cpu)
        {
            $cpu_num++;
            $load_total += $cpu->loadpercentage;
        }

        $load[]= round($load_total/$cpu_num);

    } 
    else
    {
        $load = sys_getloadavg();
    }
    return $load;
}
echo implode(' ',get_server_load());
0 голосов
/ 03 мая 2017

после поиска на форумах и пробных методов, лучше всего будет это:

$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);
print_r($cpu);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...