说明:
embedit工具运行在一批机器总是报错,报错信息如下:
bash
#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x00007f650df1bf05, pid=4853, tid=4854
#
# JRE version: OpenJDK Runtime Environment (11.0.2+9) (build 11.0.2+9)
# Java VM: OpenJDK 64-Bit Server VM (11.0.2+9, mixed mode, tiered, compressed oops, g1 gc, linux-amd64)
# Problematic frame:
# C [libcrypto.so.1.0.2k+0x70f05] OPENSSL_ia32_cpuid+0x5
#
# Core dump will be written. Default location: Core dumps may be processed with "/usr/libexec/abrt-hook-ccpp %s %c %p %u %g %t e %P %I %h" (or dumping to /home/tools/core.4853)
#
# If you would like to submit a bug report, please visit:
# http://bugreport.java.com/bugreport/crash.jsp
# 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: -Xmx512m -Djava.library.path=/cadtools/synopsys/embedit-T-2022.09-SP1/linux64/lib -Djava.util.prefs.systemRoot=/home/tools/.java -Dsun.java2d.pmoffscreen=true /cadtools/synopsys/embedit
-T-2022.09-SP1/lib/classes/integrator.jar -h /cadtools/synopsys/embedit-T-2022.09-SP1
Host: Intel(R) Xeon(R) Gold 6248 CPU @ 2.50GHz, 16 cores, 62G, Red Hat Enterprise Linux Server release 7.9 (Maipo)
Time: Thu Jun 4 18:18:27 2026 CST elapsed time: 0 seconds (0d 0h 0m 0s)
--------------- T H R E A D ---------------
Current thread (0x00007f6504011000): JavaThread "main" [_thread_in_native, id=4854, stack(0x00007f650e695000,0x00007f650e796000)]
Stack: [0x00007f650e695000,0x00007f650e796000], sp=0x00007f650e792f48, free space=1015k
Native frames: (J=compiled Java code, A=aot compiled Java code, j=interpreted, Vv=VM code, C=native code)
C [libcrypto.so.1.0.2k+0x70f05] OPENSSL_ia32_cpuid+0x5
Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j java.lang.ClassLoader$NativeLibrary.load0(Ljava/lang/String;Z)Z+0 java.base@11.0.2
j java.lang.ClassLoader$NativeLibrary.load()Z+53 java.base@11.0.2
j java.lang.ClassLoader$NativeLibrary.loadLibrary(Ljava/lang/Class;Ljava/lang/String;Z)Z+216 java.base@11.0.2
j java.lang.ClassLoader.loadLibrary0(Ljava/lang/Class;Ljava/io/File;)Z+46 java.base@11.0.2
j java.lang.ClassLoader.loadLibrary(Ljava/lang/Class;Ljava/lang/String;Z)V+312 java.base@11.0.2
j java.lang.Runtime.loadLibrary0(Ljava/lang/Class;Ljava/lang/String;)V+54 java.base@11.0.2
j java.lang.System.loadLibrary(Ljava/lang/String;)V+7 java.base@11.0.2
j integrator.system.Project.<clinit>()V+2
v ~StubRoutines::call_stub
j integrator.system.ProjectProxy.<init>()V+126
j integrator.system.ProjectProxy.getInstance(Ljava/lang/String;)Lintegrator/system/ProjectProxy;+33
j integrator.main.Q.main([Ljava/lang/String;)V+101
v ~StubRoutines::call_stub
siginfo: si_signo: 11 (SIGSEGV), si_code: 2 (SEGV_ACCERR), si_addr: 0x00007f649f667b38
Register to memory mapping:
根据报错信息,尝试更新java版本还是报错
崩溃源头函数:OPENSSL_ia32_cpuid()
OpenSSL 1.0.2k内部硬编码汇编,主动调用 CPU 的 CPUID 指令去探测 CPU 特性(SSE/AES-NI/AVX 等):
老 OpenSSL 在 Cascade Lake(Xeon 6248)新一代 CPU 上:CPU 新增的扩展寄存器 / 标识位超出 1.0.2k 代码预设范围,汇编越界访问内存 → SIGSEGV (11 段错误),日志里:
plaintext
bash
C [libcrypto.so.1.0.2k+0x70f05] OPENSSL_ia32_cpuid+0x5
siginfo: si_signo: 11 (SIGSEGV)
解决:
OPENSSL_ia32cap=0x0 ,强制把 OpenSSL 识别到的 CPU 硬件能力掩码置 0,跳过原生 cpuid 汇编探测逻辑,不走出错的OPENSSL_ia32_cpuid代码。
bash
setenv OPENSSL_ia32cap 0x0
小结: