6
回答
java使用sigar获取linux系统内存使用信息
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   
apache-tomcat-6.0.20/webapps/report-serverInfo/WEB-INF/lib下包含包:
----------------------
sigar.jar
sigar-x86-winnt.lib
libsigar-x86-linux.so
----------------------
在一台Linux机子上,运行正常。
但在另一台Linux机子上运行报错,错误信息如下:
java.lang.UnsatisfiedLinkError: org.hyperic.sigar.Mem.gather(Lorg/hyperic/sigar/Sigar;)V


估摸是动态链接库加载问题,但为什么一台机子可以,另一台就报错,不懂。求大神指导,给出解决建议~
举报
天冰
发帖于5年前 6回/5K+阅
共有6个答案 最后回答: 2年前
你好,请问linux环境下,你是将sigar.jar、jug-2.0.0-asl.jar、junit-3.8.2.jar、log4j-1.2.14.jar、libsigar-amd64-linux.so、libsigar-x86-linux.so都放 /WEB-INF/lib下
--- 共有 2 条评论 ---
杨米欧谢谢你的回答,现在是将这两个依赖文件放在了System.getProperty("java.library.path")路径下可以了,迟点试下你的方法 4年前 回复
天冰主要是 sigar.jar 如果linux环境是32位 依赖包是libsigar-x86-linux.so 如果是64位 依赖包是libsigar-amd64-linux.so 可以把这三个包都放在 lib下~ 4年前 回复
楼主怎么解决的啊?求指教啊。
--- 共有 1 条评论 ---
天冰你报的什么错~我的是依赖包问题~需要linux64位的依赖包~ 4年前 回复

 public static void main(String[] args) {
  System.out.println(System.getProperty("java.library.path"));
 }

验证一下你的libpath,注意:linux跟windows不一样的;

一般是放在/usr/lib下,呵呵

--- 共有 3 条评论 ---
张冬【续2】 2、把“ libsigar-amd64-linux.so libsigar-x86-linux.so sigar-amd64-winnt.dll sigar-x86-winnt.dll ”4个文件(或当前系统对应的那个文件)都放进获取到的其中一个路径,比如我的是放到了/usr/lib64,再运行,就正常了! (3条评论自下而上查看) 2年前 回复
张冬【续1】获取方法可以使用props.getProperty("java.library.path")或者层主的方法,比如我的获取到后有多个路径,其中有一个是/usr/lib64;【未完2】 2年前 回复
张冬这个才是正解啊!我折腾了一天,终于解决了。接手的项目,用到sigar,发现在Windows下正常,打包后在linux下运行就报错UnsatisfiedLinkError,后来发现我的Windows的jdk的bin下已经放入了需要的dll文件,而linux下没有。 解决方法及思路是: 1、获取linux下的java.library.path路径【未完】 2年前 回复
本人已经解决了..其实很简单在src下新建一个包.把 sigar-x86-winnt.lib 
libsigar-x86-linux.so 这个鬼东西放进去就OK..运行就不会出错了..亲测成功

引用来自“邓小峰”的评论

 public static void main(String[] args) {
  System.out.println(System.getProperty("java.library.path"));
 }

验证一下你的libpath,注意:linux跟windows不一样的;

一般是放在/usr/lib下,呵呵

这个才是正解啊!我折腾了一天,终于解决了。接手的项目,用到sigar,发现在Windows下正常,打包后在linux下运行就报错UnsatisfiedLinkError,后来发现我的Windows的jdk的bin下已经放入了需要的dll文件,而linux下没有。
解决方法及思路是:
1、获取linux下的java.library.path路径,获取方法可以使用props.getProperty("java.library.path")或者层主的方法,比如我的获取到后有多个路径,其中有一个是/usr/lib64;
2、把“ libsigar-amd64-linux.so libsigar-x86-linux.so sigar-amd64-winnt.dll sigar-x86-winnt.dll ”4个文件(或当前系统对应的那个文件)都放进获取到的其中一个路径,比如我的是放到了/usr/lib64,再运行,就正常了!
顶部