i3geek.com
闫庚哲的个人博客

java利用sigar.jar获取服务器运行时CPU、内存、网络等信息

开源项目:https://github.com/yangengzhe/sigar-system_runtime

介绍

利用java程序检查服务器或主机的运行时信息,包括操作系统、CPU使用情况、内存使用情况、硬盘使用情况以及网卡、网络信息。主要的办法有两种:第一种,使用jdk1.6以上自动的功能,实现数据的获取,但是该方法局限性较大,而且获得的数据也比较少,尤其是内存信息不够准确。所以,在此不讨论该方法。第二种,使用第三方的jar包进行获取,通过直接调用操作系统的api来获取系统相关数据。

本文则主要介绍一种通过Hyperic-hq产品的基础包sigar.jar来实现服务器状态数据的获取。Sigar.jar包是通过本地方法来调用操作系统API来获取系统相关数据。

使用说明

1、下载

下载地址:http://sourceforge.net/projects/sigar/files/latest/download?source=files

2、配置

使用sigar.jar需要配置两个地方:

1. 进入解压后文件的lib文件夹下,将sigar.jar导入到项目工程之中。
2. 引入相关底层支持文件,在解压后文件的lib文件夹中,有很多支持不同系统的底层文件,挑选适合的文件拷贝到java.library.path.

通常下,拷贝到java SDK目录的bin内。Mac下,eclipse中的配置方法:项目右键->属性->java build path->选择Libraries中的sigar.jar->在展开的Native library location中选择底层文件所在目录即可

附:底层支持文件与系统对应表

Linux AMD/Intel 32位:libsigar-x86-linux.so
Linux AMD/Intel 64位:libsigar-amd64-linux.so
Linux PowerPC 32位:libsigar-ppc-linux.so
Linux PowerPC 64位: libsigar-ppc64-linux.so
Linux Itanium 64位:libsigar-ia64-linux.so
Linux zSeries 64位:libsigar-s390x-linux.so
Windows AMD/Intel 32位:sigar-x86-winnt.dll
Windows AMD/Intel 64位:sigar-amd64-winnt.dll
AIX PowerPC 32位:libsigar-ppc-aix-5.so
AIX PowerPC 64位:libsigar-ppc64-aix-5.so
HP-UX PA-RISC 32位:libsigar-pa-hpux-11.sl
HP-UX Itanium 64位:libsigar-ia64-hpux-11.sl
Solaris Sparc 32位:libsigar-sparc-solaris.so
Solaris Sparc 64位:libsigar-sparc64-solaris.so
Solaris AMD/Intel 32位:libsigar-x86-solaris.so
Solaris AMD/Intel 64位:libsigar-amd64-solaris.so
Mac OS X PowerPC/Intel 32位:libsigar-universal-macosx.dylib
Mac OS X PowerPC/Intel 64位:libsigar-universal64-macosx.dylib
FreeBSD 5.x AMD/Intel 32位:libsigar-x86-freebsd-5.so
FreeBSD 6.x AMD/Intel 64位:libsigar-x86-freebsd-6.so
FreeBSD 6.x AMD/Intel 64位:libsigar-amd64-freebsd-6.so

3、实现代码

 

参考开源项目:https://github.com/yangengzhe/sigar-system_runtime

打成jar包

检测的目的是监控远程程序,所以打成jar包是十分必要的,以方便在不同机器上的运行。

第三方jar包和支持的封装

如上所说,由于本项目引用到了sigar第三方工具,并且需要很多底层服务支持。所以第一步先对外部引用的内容进行封装,将sigar.jar以及bin目录下的所有文件拷贝到目标jar包所在目录,命名为”monitor_lib”

修改java.library.path

底层服务在java中通过变量java.library.path进行调用。配置java.library.path的方法如下:

1、系统环境变量
2、eclipse中配置
3、程序加载时动态更新

我们采用第三种方案,动态更新变量,从而让jar包可以找到同目录下的”monitor_lib”文件夹

System.setProperty("java.library.path", ". monitor_lib");

通过参数传入IP

由于检测网络性能时,需要本机IP的匹配,因此需要根据不同的服务器传入不同的IP。

所以把IP改成参数传入的形式。

String ip = args[0];

打jar包运行

在eclipse中点击右键导出,生成jar包,之后把monitor_lib与jar包放置同一目录下,在命令下运行:

java -jar test.jar 192.168.191.5

就可以成功运行,并显示结果

问题解答

1、mac下eclipse中配置java.library.path

Mac下,eclipse中的配置方法:项目右键->属性->java build path->选择Libraries中的sigar.jar->在展开的Native library location中选择底层文件所在目录即可

2、网络传输速率

jar包中不提供网络传输速率的方法,需要采集两次,自行计算出传输速率

赞(0)
未经允许不得转载:爱上极客 » java利用sigar.jar获取服务器运行时CPU、内存、网络等信息
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址