3

我正在使用用于 Java 的 Sigar 库,但出现此错误:

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

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

这在程序运行几个小时后随机发生。然后,它崩溃了,我无法再监控任何参数(cpu、ram、disk...)。这太烦人了,而且让 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();
4

1 回答 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 产品了……

  • 或者……你可以放弃。

它甚至可以修复吗?

当然是……但是您可能需要花费大量精力来修复它。

于 2014-05-01T10:46:47.003 回答