Sigar 1.6.4崩溃:EXCEPTION_ACCESS_VIOLATION

我正在使用Sigar库来获取Java,我收到此错误:

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

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

这在程序运行几个小时后随机发生。 然后,它崩溃了,我不能再监视任何参数(cpu,ram,disk …)。 它非常烦人, 使得SIGAR完全没用,因为你不能相信它是否会崩溃。

我一直在阅读关于它的这两个主题,但它似乎是库的问题,没有提出适当的解决方案(并且库看起来没有修复错误)

  • https://jira.hyperic.com/browse/SIGAR-192
  • https://communities.vmware.com/message/2121479

在这个答案中有一个人在谈论如何解决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(); 

有关如何处理它的任何想法?

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

 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无用”这样的煽动性评论加剧bug报告是一个非常糟糕的主意……)

  • 您可以升级到更高版本的SIGAR以查看是否有帮助。 (目前,这是1.7 ……尚未标记为“稳定”。)

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

  • 您可以联系VMWare并询问他们是否可以获得支持合同。 似乎Hyperic现在是VMWare产品……

  • 或者……你可以放弃。

它甚至可以修复吗?

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

Interesting Posts