Sigar 1.6.4 сбой: EXCEPTION_ACCESS_VIOLATION

Я использую библиотеку Sigar для Java, и я получаю эту ошибку:

В Java Runtime Environment обнаружена фатальная ошибка: EXCEPTION_ACCESS_VIOLATION (0xc0000005) при pc = 0x0000000010014ed4, pid = 1560, tid = 4812

Здесь вы можете увидеть сгенерированный журнал ошибок. (А также мои спецификации)

Это происходит случайно после того, как программа работает в течение нескольких часов. Затем он выходит из строя, и я больше не могу контролировать любые параметры (cpu, ram, disk...). Это так раздражает и делает SIGAR абсолютно бесполезным, поскольку вы не можете доверять тому, произойдет ли он сбой или нет.

Я читал эти две темы об этом, но, похоже, проблема библиотеки не предлагает правильных решений (и библиотека не ищет исправления ошибки)

Там парень говорит о том, как решить его для 64 бит в этом ответе, но этот файл даже не доступен для загрузки. (нет папки java/src).

Любая идея о том, как с этим бороться? Это даже возможно? Если нет, то какие альтернативы Сигару вы мне предложили бы?

В случае, если это имеет значение, это функции 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...

  • Или... вы можете отказаться.

Возможно ли это сделать?

Конечно, это... но вам, возможно, придется потратить значительные усилия, чтобы исправить это.