Failure when starting FusionAuth in Docker on Mac M4
-
When running FusionAuth in Docker on an m4 mac, I see this error:
# A fatal error has been detected by the Java Runtime Environment: # # SIGILL (0x4) at pc=0x0000ffff8d33fc5c, pid=1, tid=21 # # JRE version: (21.0.4+7) (build ) # Java VM: OpenJDK 64-Bit Server VM (21.0.4+7-LTS, mixed mode, tiered, compressed oops, compressed class ptrs, g1 gc, linux-aarch64) # Problematic frame: # j java.lang.System.registerNatives()V+0 java.base # # No core dump will be written. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again # # The crash happened outside the Java Virtual Machine in native code. # See problematic frame for where to report the bug. # --------------- S U M M A R Y ------------ Command Line: -Dfusionauth.home.directory=/usr/local/fusionauth/fusionauth-app -Dfusionauth.config.directory=/usr/local/fusionauth/config -Dfusionauth.data.directory=/usr/local/fusionauth/data -Dfusionauth.log.directory=/usr/local/fusionauth/logs -Dfusionauth.plugin.directory=/usr/local/fusionauth/plugins -Djava.awt.headless=true -Dcom.sun.org.apache.xml.internal.security.ignoreLineBreaks=true --add-exports=java.base/sun.security.x509=ALL-UNNAMED --add-exports=java.base/sun.security.util=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED -DfusionAuthApp87AFBG16 -Xmx512M -Xms512M io.fusionauth.app.FusionAuthMain Host: AArch64, 14 cores, 7G, Ubuntu 24.04.1 LTS Time: Wed Jan 22 12:35:29 2025 UTC elapsed time: 0.025614 seconds (0d 0h 0m 0s) --------------- T H R E A D --------------- Current thread (0x0000ffff9802c010): JavaThread "Unknown thread" [_thread_in_native, id=21, stack(0x0000ffff9e152000,0x0000ffff9e350000) (2040K)] Stack: [0x0000ffff9e152000,0x0000ffff9e350000], sp=0x0000ffff9e34e000, free space=2032k Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) j java.lang.System.registerNatives()V+0 java.base j java.lang.System.<clinit>()V+0 java.base v ~StubRoutines::call_stub 0x0000ffff8d337144 V [libjvm.so+0x8338d8] JavaCalls::call_helper(JavaValue*, methodHandle const&, JavaCallArguments*, JavaThread*)+0x218 V [libjvm.so+0x80f488] InstanceKlass::call_class_initializer(JavaThread*)+0x284 V [libjvm.so+0x8101a8] InstanceKlass::initialize_impl(JavaThread*)+0x528 V [libjvm.so+0xdc7138] Threads::initialize_java_lang_classes(JavaThread*, JavaThread*)+0xe8 V [libjvm.so+0xdc9104] Threads::create_vm(JavaVMInitArgs*, bool*)+0x3f4 V [libjvm.so+0x8c68d4] JNI_CreateJavaVM+0x80 C [libjli.so+0x8bac] JavaMain+0x7c C [libjli.so+0xc20c] ThreadJavaMain+0xc C [libc.so.6+0x8597c] Java frames: (J=compiled Java code, j=interpreted, Vv=VM code) j java.lang.System.registerNatives()V+0 java.base j java.lang.System.<clinit>()V+0 java.base v ~StubRoutines::call_stub 0x0000ffff8d337144 siginfo: si_signo: 4 (SIGILL), si_code: 1 (ILL_ILLOPC), si_addr: 0x0000ffff8d33fc5c Registers: R0=0x0000000000000000 R1=0x0000000000000000 R2=0x0000000000000000 ...
What can I do?
-
This is due to a bug in the openjdk java library that the docker image uses. You can learn more about the bug here and track our fix (which looks like upgrading the java image our docker file users) by following this bug.
Until then, the workaround is to pass this java argument at start time:
-XX:UseSVE=0
This argument disables the use of the SVE extension, which is provides "better data parallelism for HPC and ML".
You can do that with the
FUSIONAUTH_APP_ADDITIONAL_JAVA_ARGS
environment variable in your Dockerfile. Here's an example:fusionauth: # ... environment: # ... FUSIONAUTH_APP_ADDITIONAL_JAVA_ARGS: -XX:UseSVE=0
-