2015-09-10 4 views
0

У меня есть разработчики, которые пришли ко мне с интересной проблемой в отношении Apache Ignite и Java. Это находится на HPUX 11.31 IA platform with Apache-Ignite version 1.3.0-incubating и нашем HP-UX Java build is 1.7.0.13-jinteg_2015_05_22_03_42-b00. Ошибка ниже - это то, что было передано мне, но я не могу найти, что Apache-Ignite поддерживается или тестируется на HPUX, а ошибка BUS_ADRALN, как представляется, всегда приводит к поисковым образам C++. В любом случае, если бы какой-то свет можно было пролить на нашу проблему, было бы очень полезно, поскольку я потратил два дня на то, чтобы найти что-нибудь на нем.Ошибка Apache Ignite bus_adraln при установке кеша

ОШИБКА

"siginfo:si_signo=SIGBUS: si_errno=0, si_code=1 (BUS_ADRALN), si_addr=1fffffffa98e8fe9" 

это выбрасывается после вызова создать readyQueue кэш в Ignite. Это фатальное исключение означает, что при попытке памяти во время установки кеша существует «недопустимое выравнивание адресов».

Разработчики также прислали мне пару журналов, если это поможет.

Исправлена ​​ошибка в Jim Ignite для той же проблемы, ошибка содержит более подробную информацию об установке и стеке, вызывающих ошибку.

https://issues.apache.org/jira/browse/IGNITE-1493

ответ

0

Крис,

Это выглядит очень интересно. При написании класса во время сортировки Ignite сначала записывает внутренний байтовый флаг, за которым следуют некоторые другие данные. Поэтому смещение 17 в момент крушения, упомянутого в билете, имеет смысл: 16 + 1 (наш байт).

У меня есть несколько предположений здесь: 1) Мы вышли за пределы массива. 2) Длина элемента массива байтов не равна 1. 3) Что-то еще (проблема выравнивания? Ошибка JMV?).

Вы можете сделать следующее, если это возможно: 1) Предоставьте длину массива GridUnsafeDataOutput.bytes в момент сбоя. Из отчета о сбое я вижу, что в стеке есть некоторый массив длиной 4096. Скорее всего это GridUnsafeDataOutput.bytes, но мы должны быть на 100% уверены. 2) Выполните следующую программу на пораженной машине и обеспечить выход:

public static void main(String[] args) { 
    sun.misc.Unsafe unsafe = org.apache.ignite.internal.util.GridUnsafe.unsafe(); 

    System.out.println(unsafe.arrayBaseOffset(byte[].class)); 
    System.out.println(unsafe.arrayIndexScale(byte[].class)); 
} 

Таким образом, мы будем знать параметры массива во время выполнения JVM.

Смежные вопросы