您的位置:首页 > 编程语言 > Java开发

sigar进行JAVA后台系统资源监控错误

2015-10-30 17:56 465 查看
开发环境是Spring 4.1+Mybatis 3.2.8。sigar-1.6.4用来对系统资源进行检测和报告。

在程序运行的初期是没问题,但是当内存占用到80%时就会发现错误,之后就是周期性的报错。错误信息一长串,有用的部分如下:

严重: Servlet.service() for servlet [springmvc] in context with path [/Haiwan] threw exception [Handler processing failed; nested exception is java.lang.UnsatisfiedLinkError: org.hyperic.sigar.Mem.gather(Lorg/hyperic/sigar/Sigar;)V]
with root cause

java.lang.UnsatisfiedLinkError: org.hyperic.sigar.Mem.gather(Lorg/hyperic/sigar/Sigar;)V

at org.hyperic.sigar.Mem.gather(Native Method)

at org.hyperic.sigar.Mem.fetch(Mem.java:30)

at org.hyperic.sigar.Sigar.getMem(Sigar.java:304)

at com.haiwan.util.SystemInfo.usage(SystemInfo.java:95)

at com.haiwan.controller.system.MonitorController.usage(MonitorController.java:73)

从第三行,我们可以看出,这是由于JVM在连接Sigar时出了错。

但问题也在这里:为什么刚开始可以正确运行呢?

查了相关资料,可以知道,这是一个JNI调用的问题。

只是由于需要检测系统信息,所以需要将调用的动态库放置到JVM的调用路径下去。

也就是

String path=System.getProperty("java.library.path");

path中第一个 ;前的位置(即你的java jdk的bin目录下)。

具体的动态库,在Windows下是这三个鬼:

sigar-amd64-winnt.dll

sigar-x86-winnt.dll

sigar-x86-winnt.lib

好了,到此为止,问题解决。

其他系统需要另行选择,库的列表如下:

lib/libsigar-amd64-freebsd-6.so

lib/libsigar-amd64-linux.so

lib/libsigar-amd64-solaris.so

lib/libsigar-ia64-hpux-11.sl

lib/libsigar-ia64-linux.so

lib/libsigar-pa-hpux-11.sl

lib/libsigar-ppc64-aix-5.so

lib/libsigar-ppc64-linux.so

lib/libsigar-ppc-aix-5.so

lib/libsigar-ppc-linux.so

lib/libsigar-s390x-linux.so

lib/libsigar-sparc64-solaris.so

lib/libsigar-sparc-solaris.so

lib/libsigar-universal64-macosx.dylib

lib/libsigar-universal-macosx.dylib

lib/libsigar-x86-freebsd-5.so

lib/libsigar-x86-freebsd-6.so

lib/libsigar-x86-linux.so

lib/libsigar-x86-solaris.so

PS:Sigar介绍

Sigar(System Information Gatherer And Reporter),是一个开源的工具,提供了跨平台的系统信息收集的API,核心由C语言实现的。

可以被以下语音调用:

C/C++

Java (sigar.jar auto-loads the native library)

Perl (requires bindings/perl build)

.NET C# (requires bindings/csharp build)

Ruby (requires bindings/ruby build)

Python (requires bindings/python build)

PHP (requires bindings/php build)

Erlang (requires bindings/erl build)

可以收集的信息包括:

1, CPU信息,包括基本信息(vendor、model、mhz、cacheSize)和统计信息(user、sys、idle、nice、wait)

2, 文件系统信息,包括Filesystem、Size、Used、Avail、Use%、Type

3, 事件信息,类似Service Control Manager

4, 内存信息,物理内存和交换内存的总数、使用数、剩余数;RAM的大小

5, 网络信息,包括网络接口信息和网络路由信息

6, 进程信息,包括每个进程的内存、CPU占用数、状态、参数、句柄

7, IO信息,包括IO的状态,读写大小等

8, 服务状态信息

9, 系统信息,包括操作系统版本,系统资源限制情况,系统运行时间以及负载,JAVA的版本信息等.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: