Sigar使用
Sigar(System Information Gatherer And Reporter),是一个开源的工具,提供了跨平台的系统信息收集的API,核心由C语言实现的。项目中使用Sigar进行服务器监控。很多人都对它进行了介绍:
上面两个链接中有对Sigar的介绍和使用方法。官方的介绍在这里,英语好的话还是看这个吧:
- https://support.hyperic.com/display/SIGAR/Home
- http://cpansearch.perl.org/src/DOUGM/hyperic-sigar-1.6.3-src/docs/javadoc/org/hyperic/sigar/Sigar.html
通过上面的链接,测试Sigar或者写个Sigar的Demo应该没问题了。另外,Sigar这个项目已经不再活跃了,2014年的commit只有5个,不知道是否有其他监控服务器工具,希望大家不吝赐教!
现在要在项目中使用Sigar,我们项目使用maven进行构建,网上找到了如何在maven中配置Sigar的帖子:
各位大神可以试试,我功底太浅(确切的说是没有功底),没试出来。后来发现个简单办法,虽然不甘心,先用着,也是网上找到的:
在使用的时候注意,上面链接给出了一部分代码,其他的代码在:
里面有个OsCheck类,还有就是代码中使用的Resources是guava中的Resources而不是java中的,所有如果使用maven的话,pom.xml中要加
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>18.0</version>
</dependency>
我们的项目是一个J2EE项目,开发时使用的中间件是Tomcat,在Windows和Linux上跑都没有问,可是当部署到服务器上的时候,就开始报错:
java.lang.UnsatisfiedLinkError: org.hyperic.sigar.Sigar.getNativeVersion()Ljava/lang/String;
或者
NoClassDefFoundError: Could not initialize class
如果在服务器上直接使用java -jar sigar-bin/lib/sigar.jar的方式使用,是不会报错的。
服务器上用的是TongWeb(我知道大家都没听说过),据说他和GlassFlash很像。
在查找原因时发现这个帖子:
回答是这样的:
On Redhat linux with JBoss server adding sigar jar to the LDPATH has resolve the problem.
我想LDPATH指的就是LD_LIBRARY_PATH吧,同时发现了这个帖子:
这位楼主解决了这个问题,好的,那应该就是LD_LIBRARY_PATH的问题了,但是先不要按照他说的来,一个一个加载动态库太麻烦了。发现了这个问题出现的具体原因:
是出于安全原因,Linux系统做了限制(Because of security reasons, Linux system to the limit. LD_LIBRARY_PATH not loading from .profile nor /etc/environment)。有人已经翻译好了:
好的,只要我们在每次运行前:
export LD_LIBRARY_PATH=DIR_where_Your_Sigar_Lib_is:$LD_LIBRARY_PATH
或者改/etc/ld.so.conf就可以了。
综合上面所提到的解决方法,最终项目中是这样改的:
- pom.xml中增加Sigar与Guava依赖:
- <dependency>
- <groupId>org.fusesource</groupId>
- <artifactId>sigar</artifactId>
- <version>1.6.4</version>
- </dependency>
- <dependency>
- <groupId>com.google.guava</groupId>
- <artifactId>guava</artifactId>
- <version>18.0</version>
- </dependency>
- <dependency>
- 在 http://sourceforge.net/projects/sigar/files/ 下载Sigar-1.6.4,将hyperic-sigar-1.6.4\sigar-bin\lib这个文件夹重命名为sigar放到项目的\src\main\resources\目录下
- 增加如下OsCheck类:
- public final class OsCheck {
- /**
* types of Operating Systems
*/
- public enum OSType {
- Windows, MacOS, Linux, Other
- }
- protected static OSType detectedOS;
- /**
* detected the operating system from the os.name System property and cache
* the result
*
* @returns - the operating system detected
*/
- public static OSType getOperatingSystemType() {
- if (detectedOS == null) {
- String OS = System.getProperty("os.name", "generic").toLowerCase();
- if (OS.indexOf("win") >= 0) {
- detectedOS = OSType.Windows;
- } else if ((OS.indexOf("mac") >= 0) || (OS.indexOf("darwin") >= 0)) {
- detectedOS = OSType.MacOS;
- } else if (OS.indexOf("nux") >= 0) {
- detectedOS = OSType.Linux;
- } else {
- detectedOS = OSType.Other;
- }
- }
- return detectedOS;
- }
- }
- public final class OsCheck {
- 增加SigarUtil类:
- import java.io.File;
- import com.google.common.io.Resources;
- import org.hyperic.sigar.Sigar;
- public class SigarUtil {
- private static class SigarUtilHolder{
- private static final SigarUtil INSTANCE = new SigarUtil();
- private static final Sigar Sigar = new Sigar();
- }
- private SigarUtil (){
- try {
- String file = Resources.getResource("sigar/.sigar_shellrc").getFile();
- File classPath = new File(file).getParentFile();
- String path = System.getProperty("java.library.path");
- if (OsCheck.getOperatingSystemType() == OsCheck.OSType.Windows) {
- path += ";" + classPath.getCanonicalPath();
- } else {
- path += ":" + classPath.getCanonicalPath();
- }
- System.setProperty("java.library.path", path);
- System.out.println(path);
- } catch (Exception e) {
- }
- }
- public static final Sigar getInstance(){
- return SigarUtilHolder.Sigar;
- }
- public static final SigarUtil getSigarUtilInstance(){
- return SigarUtilHolder.INSTANCE;
- }
- }
- import java.io.File;
- 按如下方式调用:
- public
void testLib() {
- try {
- Sigar sigar = SigarUtil.getInstance();
- CpuPerc cpu = sigar.getCpuPerc();
- System.out.println(String.valueOf(cpu.getCombined()));
- } catch (SigarException e) {
- e.printStackTrace();
- }
- }
- public
- 如果是Tomcat,现在项目已经可以使用了,但是如果使用其他中间件时报错的话就在终端输入
export LD_LIBRARY_PATH=DIR_where_Your_Sigar_Lib_is:$LD_LIBRARY_PATH
或者改/etc/ld.so.conf就可以了。如果使用第一种方式。服务器重启后就需要重新设置,所以我们还是修改/etc/ld.so.conf吧。/etc/ld.so.conf下面加一行sigar的路径,保存过后为了让动态链接库为系统所共享,还需运行动态链接库的管理命令ldconfig一下。
用fusioncharts做实时显示:

Sigar使用的更多相关文章
- sigar
从http://sourceforge.net/projects/sigar/files/sigar/1.6/hyperic-sigar-1.6.4.zip/download下载sigar, 参照了h ...
- Sigar介绍与使用
Sigar是Hyperic-hq产品的基础包,是Hyperic HQ主要的数据收集组件.它用来从许多平台收集系统和处理信息. 这些平台包括:Linux, Windows, Solaris, AIX, ...
- ava如何实现系统监控、系统信息收集、sigar开源API的学习(转)
ava如何实现系统监控.系统信息收集.sigar开源API的学习(转) 转自:http://liningjustsoso.iteye.com/blog/1254584 首先给大家介绍一个开源工具Sig ...
- java使用sigar 遇到问题的解决方案
先给大家介绍一个开源工具Sigar 官网:http://sigar.hyperic.com/ API:http://www.hyperic.com/support/docs/sigar/index-a ...
- Sigar.jar获取系统信息
Sigar是Hyperic-hq产品的基础包,是Hyperic HQ主要的数据收集组件. 它用来从许多平台收集系统和处理信息,这些平台包括:Linux, Windows, Solaris, AIX, ...
- sigar监控
相关参照博客: http://liningjustsoso.iteye.com/blog/1254584 http://blog.csdn.net/aoxida/article/category/12 ...
- SIGAR - System Information Gatherer And Reporter
https://support.hyperic.com/display/SIGAR/Home 收藏一篇: http://www.cnitblog.com/houcy/archive/2012/11/2 ...
- Java系统监控(淘汰sigar)
Sigar是Hyperic-hq产品的基础包,是Hyperic HQ主要的数据收集组件.它用来从许多平台收集系统和处理信息. 这些平台包括:Linux, Windows, Solaris, AIX, ...
- java sigar获取本地信息以及org.hyperic.sigar.SigarException: The device is not ready报错解决
window下,使用java sigar 获取磁盘使用率,cpu使用率以及内存使用情况等信息时. 一:首先需要下载jar包和相关文件 sigar-1.6.4.zip 如果想了解更多可以去 sigar官 ...
随机推荐
- python 打印 网格
#/usr/bin/python # -*- coding:utf-8 -*- # width 单个网格有多少个 - 宽度# height 单个网格有多少个 | 高度# lateral 横向有多少个网 ...
- VBA续嘘嘘
什么是VBA?它有什么作用? A.实现Excel中没有实现的功能. B.提高运行速度. C.编写自定义函数. D.实现自动化功能. E.通过插入窗体做小型管理软件. VBA在哪里存放的?怎么运行? A ...
- 【浅层优化实战】ssh远程登录Linux卡慢的全过程排查及解决方案
ssh远程登录Linux卡慢的全过程排查及解决方案 前言: 在linux操作系统使用过程中偶然一次感到使用ssh远程连接软件连接操作系统需要等待许久,第一次没在意,第二次也没在意,第三次有点忍受不住了 ...
- cURL入门
cURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP.FTP.TELNET等.最爽的是,PHP也支持 cURL 库.本文将介绍 cURL 的一些高级特性,以及在PHP中如 ...
- 怎么把jdk和jRE的Javadoc文档整合到MyEclipse
有时在写代码时,需要查看javadoc文档,便于编写程序.故如何把Javadoc文档整合到MyEclipse,以便于查看呢? 解决办法: 1.在MyEclipse中菜单栏的“Windows”---&g ...
- How to use a 32bit Oracle11_g client in 64 win system and not conflict with sqldeveloper 64 bit tool
At the path:C:\app\USER_NAME\product\11.2.0\client_1\sqldeveloper\sqldeveloper\bin, there a file 'sq ...
- 关于由CSS2.1所提出的的BFC的理解与样例
今天在这里谈谈css中BFC.“BFC”是Block Formatting Context的缩写,这个概念是由CSS2.1提出来的,它决定了元素如何对其内容进行定位,以及与其他元素的关系和相互作用.满 ...
- [转]iOS7中UITextView contentsize改变时机
在iOS7以下版本中,对UITextView设置了text属性,则contentsize就会变化,从而可以根据contentsize的变化来改变UITextView高度来做出TextView高度随着输 ...
- C#与Java在继承静态类上的区别
interface ITest { int Get(); } abstract class Test : ITest //此处会出现错误:Programe.Test不实现接口成员Program.ITe ...
- Android Studio 常用快捷键
继承Eclipse的快捷键 : File->Settings->Keymap->有一个Keymaps 下拉菜单,选择Eclipse. 这里讲主要常用的快捷键 : Ctrl ...