Sigar 1.6.4 崩溃:EXCEPTION_ACCESS_VIOLATION

3

我正在使用Java的Sigar库,但是遇到了以下错误:

Java运行时环境检测到致命错误: EXCEPTION_ACCESS_VIOLATION (0xc0000005),位于pc=0x0000000010014ed4,pid=1560,tid=4812

这里 您可以查看生成的错误日志。(以及我的机器规格)

程序运行几个小时后,这种情况会随机发生。然后,它会崩溃,我将无法再监视任何参数(CPU、RAM、磁盘等)。这非常令人恼火,使SIGAR完全无用,因为您无法信任它是否会崩溃。

我已经阅读了这两个关于此问题的主题,但似乎是库的问题,没有提出适当的解决方案(而且该库似乎没有修复错误)。

有个人谈论如何解决64位问题在这个答案中, 但是那个文件甚至无法下载。(没有java/src文件夹)。

你有什么想法来处理它吗?它是否可修复?如果不能,你会建议我使用哪些替代Sigar?

如果相关的话,这些是我在应用程序中使用的Sigar函数:

 - new Sigar();
 - Sigar.getProcCpu();
 - Sigar.getCpuList();

 - new ProcessFinder();
 - ProcessFinder.find();

 - new ProcCpu();
 - ProcCpu.gather();

 - new ProcMem();
 - ProcMem.gather();
 - ProcMem.getResident()

 - ProcCpu.getTotal();
 - ProcCpu.getLastTime();

 - Sigar.getMem();
 - Mem.getActualFree();
 - Mem.getActualUsed();
 - Mem.getFree();
 - Mem.getRam();
 - Mem.getTotal();
 - Mem.getUsed();
 - Mem.getUsedPercent();

 - new FileSystemUsage();
 - FileSystemUsage.getFree();
 - FileSystemUsage.getUsed();
1个回答

1

有什么办法可以处理它吗?

从错误转储中获取的线程堆栈跟踪如下:

Stack: [0x000000000d180000,0x000000000d280000],  sp=0x000000000d27f3c0,  free space=1020k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C  [sigar-amd64-winnt.dll+0x14ed4]

Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
J  org.hyperic.sigar.ptql.SigarProcessQuery.find(Lorg/hyperic/sigar/Sigar;)[J
J  com.hpuk.sentinel.monitor.Monitor.getData()Ljava/util/List;
J  com.hpuk.schedule.Scheduler.run()V
v  ~StubRoutines::call_stub

看起来问题出现在SIGAR本地库中。

你可以做什么?

  • 你可以查看是否有其他人报告了这个问题。(你找到的SIGAR-192问题与你的问题非常不同。)

  • 你可以报告问题并等待维护者提供解决方案。(但是用“SIGAR无用”之类的煽动性言论来增加错误报告是一个非常糟糕的想法...)

  • 你可以升级到较新版本的SIGAR,看看是否有所帮助。(目前是1.7...尚未标记为“稳定”)

  • 你可以下载SIGAR源代码并尝试自行调试问题。

  • 你可以联系VMWare并询问是否可以获得支持合同。看起来Hyperic现在是VMWare产品...

  • 或者...你可以放弃。

它能修复吗?

当然可以...但你可能需要付出大量的努力来修复它。


我正在使用最新版本1.6.4(来自2010年)。我也在他们的开发者论坛上报告了这个问题...你知道Sigar的其他替代方案吗? - Alvaro
我试过一些,但好像不是很多... 我只是想知道你有没有尝试过一些效果不错的。 - Alvaro
1
@Alvaro - 我上一条评论的第一个单词是什么? - Stephen C
1
我并不是再次询问,只是想澄清我的答案。 - Alvaro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接