简体   繁体   中英

Apache Ignite bus_adraln error during installation of cache

I have developers that came to me with an interesting issue in regards to Apache Ignite and Java. This is on a HPUX 11.31 IA platform with Apache-Ignite version 1.3.0-incubating and our HP-UX Java build is 1.7.0.13-jinteg_2015_05_22_03_42-b00 . The below error is what has been passed to me but I can't find that Apache-Ignite is supported or tested on HPUX and the BUS_ADRALN error seems to always result in C++ search hits. Anyway if some light could be shed on what our issue is it would be greatly appreciated as I have spent two days trying to find anything on it.

ERROR

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

this is thrown after the call to create the readyQueue cache in Ignite. This fatal exception means there is an "invalid address alignment" when trying to memory during the installation of cache.

The developers also sent me a couple logs if that would be of assistance.

A bug in Ignite's Jira for the same issue has been created, the bug has more detailed information about the setup and stack causing the error.

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

Chris,

This looks very interesting. When writting a class during marshalling Ignite first writes an internal byte flag, followed by some other data. Therefore offset 17 at the moment of crash mentioned in the ticket makes sense: 16 + 1 (our byte).

I have several assumptions here: 1) We are out of bounds of the array. 2) Byte array element length is not 1. 3) Something else (alignment problem? JMV bug?).

Can you please do the following if possible: 1) Provide GridUnsafeDataOutput.bytes array length at the moment of crash. From the crash report I see that there is some array of length 4096 on the stack. Most probably this is GridUnsafeDataOutput.bytes, but we need to be 100% sure. 2) Run the following program on affected machine and provide the output:

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));
}

This way we will know runtime JVM array parameters.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM