Как получить использование ЦП и использование ОЗУ без exec?
Как VBulletin получает системную информацию без использования exec
? Есть ли какая-либо другая информация, которую я могу получить о сервере без exec? Меня интересует:
-
Используемая ширина полосы пропускания
- тип системы
- Скорость/использование/количество CPU
- Использование ОЗУ
Ответы
Ответ 1
Используйте PHPSysInfo библиотека
phpSysInfo - это PHP с открытым исходным кодом script, который отображает информацию о хосте, к которому обращаются. Он отобразит такие вещи, как:
- Uptime
- процессор
- Память
- SCSI, IDE, PCI
- Ethernet
- Floppy
- Информация о видео
Он непосредственно анализирует парсы /proc
и не использует exec
.
Другой способ - использовать Linfo. Это очень быстрый межплатформенный php script, который очень подробно описывает хост-сервер, предоставляя информацию, такую как использование RAM, дисковое пространство, массивы RAID, аппаратные средства, сетевые карты, ядро, os, samba/cups/truecrypt, temps, диски и многое другое.
Ответ 2
Это то, что я использую на серверах 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';
Ответ 3
<?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());
Ответ 4
после поиска на форумах и много методов, лучше всего это:
$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);