如何为 java JVM 添加一些 OS 级别的指标到 JMX

How to add some OS level metrics to JMX for java JVM

使用 JConsole,除了处理特定指标外,其他人还可以访问默认为 OS 收集的指标,例如内存、CPU 负载和...。我的问题是我们可以添加一些 OS 自定义指标,例如使用 Java 文件 API 某些目录的使用情况或检查特定端口是否响应? 我使用远程 SSH 和像 du -sh /directory 这样有很多延迟的命令收集所谓的指标,我想使用 JMX 来获取它,这样它可以 运行 更快。

question 讨论了添加 spring 指标。

正如链接的问题所示,很容易将 Java class 公开为 MBean,因此您当然可以编写一个 class 来收集您需要的指标。在 Java 中实现 du 并不困难。但是,我不确定它是否能解决您的问题。 du -sh /directory 的示例可能很慢,因为它需要递归地测量目录层次结构的大小。在 Java.

中,这将同样缓慢(可能更慢!)

附带说明一下,我通常会使用 collectd 或 Telegraf 来做这类事情,但是再次 I/O 查找磁盘使用情况的成本是相同的。

我建议将一些带有时间的日志添加到您当前的脚本中,以便您可以看到它在哪里花费时间。例如,如果使用 SSH 连接不到 1 秒,确定目录大小需要 15 秒,则从 SSH 转移到 JMX 将无济于事。