Сигар 1.6.4 сбой: EXCEPTION_ACCESS_VIOLATION
Я использую библиотеку Sigar для Java и получаю эту ошибку:
Фатальная ошибка была обнаружена средой выполнения Java: EXCEPTION_ACCESS_VIOLATION (0xc0000005) при pc=0x0000000010014ed4, pid=1560, tid=4812
Здесь вы можете увидеть сгенерированный журнал ошибок. (А также мои технические характеристики машины)
Это происходит случайным образом после запуска программы в течение нескольких часов. Затем происходит сбой, и я больше не могу контролировать ни один параметр (процессор, оперативная память, диск...). Это так раздражает и делает 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 ответ
Есть идеи о том, как с этим бороться?
Трассировка стека потоков из дампа ошибок выглядит следующим образом:
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...
Или... ты можешь сдаться.
Это даже поправимо?
Конечно, это... но вам может потребоваться приложить значительные усилия, чтобы это исправить.