$value) { $diff[$key] = $stat2[$key] - $value; } $total = array_sum($diff); if ($total == 0) { return [ 'user' => 0, 'system' => 0, 'idle' => 100, ]; } return [ 'user' => round(($diff['user'] + $diff['nice']) / $total * 100, 2), 'system' => round($diff['system'] / $total * 100, 2), 'idle' => round($diff['idle'] / $total * 100, 2), ]; } /** * 读取 /proc/stat 文件中的 CPU 信息 */ private static function readStat(): array { $fh = fopen('/proc/stat', 'r'); $line = fgets($fh); fclose($fh); $parts = preg_split('/\s+/', trim($line)); // /proc/stat 第一行示例: // cpu 3357 0 4313 1362393 0 0 0 return [ 'user' => (int) $parts[1], 'nice' => (int) $parts[2], 'system' => (int) $parts[3], 'idle' => (int) $parts[4], 'iowait' => (int) ($parts[5] ?? 0), 'irq' => (int) ($parts[6] ?? 0), 'softirq'=> (int) ($parts[7] ?? 0), ]; } }