系統監控中獲取 CPU 佔用率是基礎需求。本文匯總主流語言的實現方案,重點講解跨平台通用的 WMIC 方式與語言原生 API 對比。
Windows 系統通用,調用系統工具獲取瞬時 CPU 佔用:
C:\> wmic cpu get LoadPercentage LoadPercentage 71
public static int getCpuRate() throws CantGetData {
String cmd = "wmic cpu get LoadPercentage";
String ret = CmdX.exec(cmd);
String[] lines = ret.split("\n");
List validLines = new ArrayList<>();
for (String line : lines) {
String trimmed = line.trim();
if (trimmed.length() > 0) validLines.add(trimmed);
}
if (validLines.size() == 1) throw new CantGetData(ret);
String cpu = validLines.get(1).trim(); // 第2行是數值
return Integer.parseInt(cpu);
}
// 使用 sleep 控制執行頻率,間接限制線程池任務吞吐 Thread.sleep(100); // 根據業務調整
| 語言 | 核心 API/類 | 特點 |
|---|---|---|
| Java | ThreadMXBean, OperatingSystemMXBean | 標準化、跨平台、可獲取進程/線程級 |
| C#/.NET | PerformanceCounter("Processor", "% Processor Time", "_Total") | Windows 原生、功能豐富 |
| PHP | sys_getloadavg() / /proc/stat (Linux) | Linux 下解析 /proc 更準確 |
| Node.js | os.cpus() 計算時差 | 非阻塞、需連續採樣計算 |
選擇方案時需考慮:部署環境、精度要求、性能開銷、維護成本。WMIC 適合簡單 Windows 監控,生產系統建議使用語言原生 API 或成熟監控組件(如 Micrometer、Prometheus Client)。