Java监控封装核心是分离采集、建模、判定、报警四层职责:统一定义CpuUsageMetric/MemoryUsageMetric等指标实体,通过策略模式适配Linux/oshi等采集实现,报警逻辑由AlertEngine统一调度并解耦通知方式。

用 Java 封装 CPU 和内存监控的核心思路
封装不是简单把采集代码堆在一起,而是把“采集行为”、“指标建模”、“阈值判定”、“报警触发”四层职责分离,形成可复用、可配置、可扩展的组件。重点在于:指标统一建模(如 CpuUsageMetric、MemoryUsageMetric),采集逻辑解耦(不依赖具体库实现),报警策略外置(避免硬编码阈值)。
定义标准化指标实体类
每个指标应包含原始值、采集时间、单位、状态标识(如正常/告警),便于后续聚合与判断:
- CpuUsageMetric:含 usagePercent(double, 0.0–100.0)、systemCpu、userCpu、timestamp
- MemoryUsageMetric:含 usedBytes、totalBytes、usagePercent(自动计算)、freeBytes
- 二者均继承抽象基类 SystemMetric,提供 isAboveThreshold(double threshold) 模板方法
采集逻辑封装:适配不同数据源
用策略模式屏蔽底层差异。例如:
- Linux 环境优先走 /proc/stat 和 /proc/meminfo 文件解析(轻量、无依赖)
- 跨平台场景集成 oshi-core 库,通过 CentralProcessor 和 GlobalMemory 获取实时数据
- 封装为 CpuCollector 和 MemoryCollector 接口,运行时按环境自动选择实现类
阈值报警逻辑解耦设计
报警不应写死在采集方法里,而应由独立的 AlertEngine 统一调度:
立即学习“Java免费学习笔记(深入)”;
- 每个指标实体支持绑定一个 AlertRule(如 cpu > 90% for 3m),规则含阈值、持续时间、触发次数等字段
- AlertEngine 定期拉取最新指标,调用 metric.checkAlert(rule) 判断是否满足条件
- 触发后交由 AlertNotifier(邮件/SMS/钉钉/Webhook)处理,完全与采集模块无关
实际使用示例(简洁版)
启动时初始化:
MetricsCollector collector = new LinuxMetricsCollector(); // 或 OshiMetricsCollector AlertRule cpuRule = AlertRule.builder().threshold(90.0).durationSeconds(180).build(); AlertEngine engine = new AlertEngine(collector, List.of(new CpuAlertHandler(cpuRule))); // 启动定时采集 + 报警检查(如每10秒一次) ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(2); scheduler.scheduleAtFixedRate(engine::collectAndCheck, 0, 10, TimeUnit.SECONDS);
这样封装后,换监控平台只需替换 AlertNotifier 实现;加新指标(如磁盘)只需新增 collector + metric + rule 类型,不侵入原有逻辑。


















