Java程序监视系统运行状况的最佳方法是什么?
我希望能够从基于Java的系统内部监视主要系统运行状况指示器。主要兴趣点包括CPU温度,主板温度,风扇速度等。
是否有可用的软件包:
- 使此类数据可用于Java?
- 在Windows或者Linux或者两者上均可使用?
- 是开放/免费/便宜的吗?
解决方案
几个月前,我在寻找这样的图书馆,但没有发现任何有趣的东西。创建一个不是不可能的,所以我建议这样做。我们可能需要访问本机库,才能使用JNA(比JNI容易)。首先在一个平台上添加对某些功能的支持,然后开始添加对其他功能和平台的支持。
与我们分享!人们将开始使用它,甚至可能对开发有所帮助,并且很快我们将拥有一个功能齐全的Java系统监视库。
JMX + JNI =解决方案
我们将找到的最接近的东西是Hyperic Sigar库:
http://www.hyperic.com/products/sigar.html
它不会降低AFAIK的温度,但会向我们显示许多本地统计数据,例如CPU,内存,磁盘I / O,网络I / O等。它已移植到当今人们在其上部署Java的大多数体系结构。许可证是GPL,尽管我认为我们也可以购买商业许可证。
我们将Sigar与Terracotta一起用于群集监视,对此感到非常满意。
我相信大多数此类事情通常是通过SNMP(对于专业系统)完成的,这是使此类信息以基于标准的方式可用的常用方法。 JMX也可以通过SNMP使用。然后,问题就来了,哪个Java更好的SNMP库(系统是否支持它)?
Windows和Linux都支持MIB,它们可通过SNMP公开我们要查找的参数。而且,大多数主要供应商都针对其服务器硬件发布了特殊的MIB。
我已经使用商业iReasoning SNMP API实现了SNMP MIB和Java应用程序的监视,并且它们工作得很好。还有一个开源的SNMP4J,我个人没有经验,但是看起来还不错。
因此,根据需要,我们可以为要监视的主机打开SNMP信息的发布。无需编码。这只是一个配置问题。
例如,对于CPU温度,必须启用MIB LM-SENSORS-MIB。在Linux下,我们可以使用snmpwalk客户端查看OID .1.3.6.1.4.1.2021.13.16.2.1.3
查看CPU温度。一旦做好了准备,并且知道它正确地发布了数据,就可以开始实施真正的监视解决方案。
我们可以使用Java SNMP库来轮询并订阅要监视的主机的SNMP陷阱。我们还可以使用任何商业或者开源监视工具(用于SNMP控制台的Google)。