Как получить использование ЦП и использование ОЗУ без exec?

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

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

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

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

  • Uptime
  • ЦПУ
  • Память
  • SCSI, IDE, PCI
  • Ethernet
  • дискета
  • Информация о видео

Он непосредственно анализирует parses /proc и не использует exec .


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

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

CPU в процентах используемых сердечников (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'; 
 <?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()); 

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

 $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);