我使用Sigar库获取Java并且我收到此错误:
Java运行时环境检测到致命错误: pc = 0x0000000010014ed4,pid = 1560,tid = 4812
EXCEPTION_ACCESS_VIOLATION(0xc0000005)
Here您可以看到生成的错误日志。 (以及我的机器规格)
这在程序运行几个小时后随机发生。然后,它崩溃了,我不能再监视任何参数(cpu,ram,disk ...)。它非常烦人,使SIGAR完全没用,因为你不能相信它是否会崩溃。
我一直在阅读关于它的这两个主题,但似乎库的一个问题是没有提出适当的解决方案(并且图书馆看起来没有修复错误)
有一个人谈论如何解决64位in this answer,但该文件甚至无法下载。 (那里没有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();
答案 0 :(得分: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无用”这样的煽动性评论加剧bug报告是一个非常糟糕的主意......)
您可以升级到更高版本的SIGAR,看看是否有帮助。 (目前,这是1.7 ......尚未标记为“稳定”。)
您可以下载SIGAR源代码并尝试自行调试问题。
您可以联系VMWare并询问他们是否可以获得支持合同。似乎Hyperic现在是VMWare产品......
或者......你可以放弃。
它是否可以修复?
当然是......但你可能需要花费大量精力来修复它。