使用 Zabbix 2.4 內置 Template JMX Generic 監控 Java 應用時,頻繁觸發告警:
70% os Process CPU Load on {HOST.NAME}
但登錄服務器 top/pidstat 查看,進程 CPU 佔用明顯遠低於 70%,甚至個位數。
原觸發器表達式:
{Template JMX Generic:jmx["java.lang:type=OperatingSystem",ProcessCpuLoad].last(0)} > 0.7
實際情況:
java.lang:type=OperatingSystem 的 ProcessCpuLoad 屬性返回值已經是 百分比(已乘 100),範圍 0~100。ProcessCpuLoad = 7.5 就觸發 > 0.7 告警。修正後觸發器表達式:
{Template JMX Generic:jmx["java.lang:type=OperatingSystem",ProcessCpuLoad].last(0)} > 70
操作路徑:Configuration → Templates → Template JMX Generic → Triggers → 編輯對應觸發器 → Expression 修改為 70 → Update。
Zabbix 官方已確認並記錄:ZBX-10158
| MBean 屬性 | 返回單位 | 常見誤區 |
|---|---|---|
| ProcessCpuLoad | 百分比 (0-100) | 按 0-1 判斷 |
| SystemCpuLoad | 百分比 (0-100) | 同左 |
| HeapMemoryUsage.used | Bytes | 誤以為 MB/GB |
| NonHeapMemoryUsage.committed | Bytes | 同左 |
| CollectionTime | Milliseconds | 誤以為 Seconds |
最佳實踐:編寫/導入模板前,先用 jconsole 或 jmxterm 實際查詢一次 MBean 屬性值,確認單位與量級,再設置觸發器閾值。