0

我有一些开发人员向我提出了一个关于 Apache Ignite 和 Java 的有趣问题。这是在 aHPUX 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++ 搜索命中。无论如何,如果可以阐明我们的问题是什么,那将不胜感激,因为我花了两天时间试图找到任何关于它的东西。

错误

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

这是在调用以readyQueue在 Ignite 中创建缓存之后抛出的。这个致命的异常意味着在安装缓存期间尝试内存时存在“无效的地址对齐”。

如果有帮助,开发人员还向我发送了一些日志。

已在 Ignite 的 Jira 中针对同一问题创建了一个错误,该错误包含有关导致错误的设置和堆栈的更详细信息。

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

4

1 回答 1

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 数组参数。

于 2015-09-16T10:56:13.860 回答