-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathget_sys_load.php
More file actions
executable file
·105 lines (96 loc) · 3.95 KB
/
get_sys_load.php
File metadata and controls
executable file
·105 lines (96 loc) · 3.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
<?php include_once("/var/www/html/site/secur.php"); ?>
<?php
// Получение средней загрузки CPU за 1 минуту
$loadavg = sys_getloadavg();
$cores = floatval(shell_exec('sudo nproc'));
$cpuLoadPercent = (($loadavg[0]) * 100) / $cores ; // средняя за 1 минуту
function formatFileSize($size, $rd = 0) {
$a = array("B", "KB", "MB", "GB", "TB", "PB");
$pos = 0;
while ($size >= 1024) {
$size /= 1024;
$pos++;
}
return round($size,$rd)." ".$a[$pos];
}
// Получение загрузки по ядрам (использование mpstat)
function getCpuCoreUsage() {
$jsonOutput = shell_exec("sudo mpstat -P ALL -o JSON 1 1");
$data = json_decode($jsonOutput, true);
if (!$data || !isset($data['sysstat']['hosts'][0]['statistics'][0]['cpu-load'])) {
return [];
}
$stats = $data['sysstat']['hosts'][0]['statistics'][0]['cpu-load'];
$coreUsages = [];
foreach ($stats as $stat) {
if (isset($stat['cpu'])) {
$cpu = $stat['cpu'];
if ($cpu == 'all') continue; // пропускаем общую статистику, если нужно
$usage = 100 - floatval($stat['idle']); // использование
$coreUsages[$cpu] = $usage;
}
}
return $coreUsages;
}
// Получение памяти в гигабайтах и процентах
function getMemoryUsage() {
$totalMemStr = shell_exec("sudo free | grep Mem | awk '{print $2}'");
$usedMemStr = shell_exec("sudo free | grep Mem | awk '{print $3}'");
$totalMem = floatval($totalMemStr);
$usedMem = floatval($usedMemStr);
$percentUsed = ($usedMem / $totalMem) * 100;
return [
'total_gb' => $totalMem,
'used_gb' => $usedMem,
'percent' => $percentUsed
];
}
// Получение информации о дисках
function getDiskIO() {
// Выполнение команды с JSON
$json_output = shell_exec("sudo iostat -d -x 1 1 -o JSON");
$data = json_decode($json_output, true);
if (!$data || !isset($data['sysstat']['hosts'][0]['statistics'][0]['disk'])) {
return [];
}
// В завимости от структуры, получаем данные про диски
$disks = [];
$stats = $data['sysstat']['hosts'][0]['statistics'][0]['disk'];
foreach ($stats as $stat) {
if (isset($stat['disk_device']) && strpos($stat['disk_device'], "sd") !== false) {
$disks[] = [
'device' => $stat['disk_device'],
'kB_read/sec' => $stat['rkB/s']*1000,
'kB_wrtn/sec' => $stat['wkB/s']*1000,
'utilization_percent' => isset($stat['util']) ? $stat['util'] : null,
];
}
}
return $disks;
}
// Вывод результатов
echo "<h5>Нагрузка CPU по ядрам</h5>";
$coreUsages = getCpuCoreUsage();
foreach ($coreUsages as $core => $usage) {
echo "Ядро $core: " . round($usage, 2) . "%<br>";
}
echo "Средняя (за 1 минуту): " . round($cpuLoadPercent, 2) . "%<br>";
echo "<h5>Использование оперативной памяти</h5>";
$memUsage = getMemoryUsage();
echo "Всего: " . formatFileSize($memUsage['total_gb']*1024, 2) . "<br>";
echo "Занято: " . formatFileSize($memUsage['used_gb']*1024, 2) . "<br>";
echo "Процент использования: " . round($memUsage['percent'], 2) . "%<br>";
echo "<h5>Нагрузка на дисковую подсистему</h5>";
$disks = getDiskIO();
echo "<table border=\"1\" width=\"35%\" cellpadding=\"3\">";
echo "<tr><th>Устройство</th><th>Чтение</th><th>Запись</th><th>Загруженность</th></tr>";
foreach ($disks as $disk) {
echo "<tr>";
echo "<td>" . $disk['device'] . "</td>";
echo "<td>" . formatFileSize($disk['kB_read/sec']) . "/s</td>";
echo "<td>" . formatFileSize($disk['kB_wrtn/sec']) . "/s</td>";
echo "<td>" . round($disk['utilization_percent'], 2) . "%</td>";
echo "</tr>";
}
echo "</table><hr>";
?>