问题背景
事情是这样,有个客户的系统原有在华为老版本的XEN架构的虚拟化上运行,运行环境如下:
CPU:Intel(R) Xeon(R) CPU E7-4830 v2
内存:16G
磁盘:300G
操作系统:centos6.9
应用软件:weblogic 10.3.6
JDK版本(这个是重点)java version "1.6.0_45"
Java(TM) SE Runtime Environment (build 1.6.0_45-b06)
Oracle JRockit(R) (build R28.2.7-7-155314-1.6.0_45-20130329-0641-linux-x86_64, compiled mode)
现在把该虚拟机通过V2V,迁移到华为新的KVM架构的虚拟化下,主要是更换了新的硬件及虚拟化底层,CPU型号有变化。
CPU:Intel(R) Xeon(R) Gold 5318Y
问题现像
问题就是进行整机V2V之后,发现Weblogic无法启动,报错就是无法启动JAVA虚拟机,段错误

尝试GDB跟踪一下,看起来就是无法分配内存,其它啥错误日志都没有了,这对于不会开发的我十分头痛。

由于客户没有买维保应用厂商也没有人支持,现在旧系统还是重要生产,没有人给解决(就很离谱。。。)无奈只能结束迁移回退。
解决过程
尝试把所有的报错给AI,分析出来的没有啥有价值的信息。看起来是思路不对。
与多位大佬沟通都没发现啥可用的信息,据墨哥分析,可能是更换了硬件,导致的哪里不兼容。

顺着这个思路,重新提问下AI,更换了CPU 会不会导致JAVA无法启动,还真有答案。
以下是问题解决后,让AI给重新整理我又捞干的话:
(老 CPU:Xeon E7-4830 v2)V2V 迁移到华为 KVM 虚拟化(新 CPU:Xeon Gold 5318Y) 后,新 CPU 的指令集升级(新增 AVX512 高级指令集) + JRockit R28.2.7(jdk1.6.0_45)对新 CPU 指令集的兼容性 BUG,导致 JVM 底层 JIT 编译时执行非法指令,直接触发段错误,这是这个环境组合下的经典必现问题
✔ 新旧 CPU 指令集差异(核心矛盾)
老环境Intel Xeon E7-4830 v2:仅支持 SSE/AVX 基础指令集,无 AVX2/AVX512;
新环境Intel Xeon Gold 5318Y:属于第三代至强可扩展处理器,原生支持 AVX2、AVX512 等高级 CPU 指令集;
✔ JRockit 的致命 BUG
你用的 Oracle JRockit R28.2.7 (1.6.0_45) 是2013 年的老版本,这个版本的 JRockit 虚拟机在JIT 即时编译器的实现上,完全没有对 AVX2/AVX512 指令集做兼容适配:
当 JRockit 运行在支持 AVX512 的新 CPU 上时,会「误检测」并尝试使用这些它不认识的高级指令集做编译优化;
执行到非法的 AVX512 指令时,操作系统内核会直接终止进程,表现就是 段错误 (Segmentation Fault) + core dumped;
✔ 解决方案
核心参数:-XnoOpt(该参数仅能适用jrockit版本的JDK)
完全禁用 JRockit 的所有 JIT 编译优化,让 JVM 运行在「解释执行模式」下,彻底规避所有和 CPU 指令集相关的编译优化 BUG;优点:绝对生效,是这个场景的终极兜底方案,没有之一;缺点:性能会有 10%-20% 的下降(但你的是管理节点 AdminServer,不是业务节点,完全可以接受,业务节点也能凑合用);
试过之后确实问题解决了,而且查了官方文档,确实不是胡诌的,有据可查。

之后还遇到另一个问题,就是在Web控制台上无法启动服务,但是手动用脚本启还没问题./startManagedWebLogic.sh app_server1 http://x.x.x.x:7001

形图启动的时候,查看nodemanager报错日志如下。
[weblogic@server1 nodemanager]$ tail -f nodemanager.log
<2025-12-31 20:51:10> <INFO> <wisedu_domain> <app_server1> <Boot identity properties saved to "/opt/Oracle/Middleware/wlserver_10.3/common/nodemanager/servers/app_server1/data/nodemanager/boot.properties">
<2025-12-31 20:51:10> <INFO> <wisedu_domain> <app_server1> <Startup configuration properties saved to "/opt/Oracle/Middleware/wlserver_10.3/common/nodemanager/servers/app_server1/data/nodemanager/startup.properties">
<2025-12-31 20:51:10> <INFO> <wisedu_domain> <app_server1> <Rotated server output log to "/opt/Oracle/Middleware/wlserver_10.3/common/nodemanager/servers/app_server1/logs/app_server1.out00012">
<2025-12-31 20:51:10> <INFO> <wisedu_domain> <app_server1> <Server error log also redirected to server log>
<2025-12-31 20:51:10> <INFO> <wisedu_domain> <app_server1> <Starting WebLogic server with command line: /opt/jrockit-jdk1.6/jre/bin/java -Dweblogic.Name=app_server1 -Dbea.home=/opt/Oracle/Middleware -Djava.security.policy=/opt/Oracle/Middleware/wlserver_10.3/server/lib/weblogic.policy -Dweblogic.management.server=http://10.2.0.134:7001 -Djava.library.path=/usr/java/packages/lib/amd64:/opt/jrockit-jdk1.6/jre/lib/amd64/jrockit:/opt/jrockit-jdk1.6/jre/lib/amd64:/opt/jrockit-jdk1.6/jre/../lib/amd64:/opt/Oracle/Middleware/patch_wls1036/profiles/default/native:/opt/Oracle/Middleware/wlserver_10.3/server/native/linux/x86_64:/opt/Oracle/Middleware/wlserver_10.3/server/native/linux/x86_64/oci920_8 -Djava.class.path=/opt/Oracle/Middleware/patch_wls1036/profiles/default/sys_manifest_classpath/weblogic_patch.jar:/opt/jrockit-jdk1.6/lib/tools.jar:/opt/Oracle/Middleware/wlserver_10.3/server/lib/weblogic_sp.jar:/opt/Oracle/Middleware/wlserver_10.3/server/lib/weblogic.jar:/opt/Oracle/Middleware/modules/features/weblogic.server.modules_10.3.6.0.jar:/opt/Oracle/Middleware/wlserver_10.3/server/lib/webservices.jar:/opt/Oracle/Middleware/modules/org.apache.ant_1.7.1/lib/ant-all.jar:/opt/Oracle/Middleware/modules/net.sf.antcontrib_1.1.0.0_1-0b2/lib/ant-contrib.jar::/opt/Oracle/Middleware -Dweblogic.system.BootIdentityFile=/opt/Oracle/Middleware/wlserver_10.3/common/nodemanager/servers/app_server1/data/nodemanager/boot.properties -Dweblogic.nodemanager.ServiceEnabled=true -Dweblogic.security.SSL.ignoreHostnameVerification=false -Dweblogic.ReverseDNSAllowed=false -Djava.awt.headless=true -Xms1024m -Xmx2048m weblogic.Server >
<2025-12-31 20:51:10> <INFO> <wisedu_domain> <app_server1> <Working directory is '/opt/Oracle/Middleware/wlserver_10.3/common/nodemanager'>
<2025-12-31 20:51:10> <INFO> <wisedu_domain> <app_server1> <Rotated server output log to "/opt/Oracle/Middleware/wlserver_10.3/common/nodemanager/servers/app_server1/logs/app_server1.out00013">
<2025-12-31 20:51:10> <INFO> <wisedu_domain> <app_server1> <Server error log also redirected to server log>
<2025-12-31 20:51:10> <INFO> <wisedu_domain> <app_server1> <Server output log file is '/opt/Oracle/Middleware/wlserver_10.3/common/nodemanager/servers/app_server1/logs/app_server1.out'>
<2025-12-31 20:51:12> <INFO> <wisedu_domain> <app_server1> <Server failed during startup so will not be restarted>
<2025-12-31 20:51:12> <WARNING> <Exception while starting server 'app_server1'>
java.io.IOException: Server failed to start up. See server output logfor more details.
at weblogic.nodemanager.server.AbstractServerManager.start(AbstractServerManager.java:208)
at weblogic.nodemanager.server.ServerManager.start(ServerManager.java:24)
at weblogic.nodemanager.server.Handler.handleStart(Handler.java:617)
at weblogic.nodemanager.server.Handler.handleCommand(Handler.java:129)
at weblogic.nodemanager.server.Handler.run(Handler.java:73)
at java.lang.Thread.run(Thread.java:662)
[weblogic@server1 nodemanager]$ cat /opt/Oracle/Middleware/wlserver_10.3/common/nodemanager/servers/app_server1/logs/app_server1.out
<2025-12-31 20:51:10> <INFO> <NodeManager> <Server output log file is '/opt/Oracle/Middleware/wlserver_10.3/common/nodemanager/servers/app_server1/logs/app_server1.out'>
<2025-12-31 20:51:12> <FINEST> <NodeManager> <Waiting for the process to die: 17147>
<2025-12-31 20:51:12> <INFO> <NodeManager> <Server failed during startup so will not be restarted>
<2025-12-31 20:51:12> <FINEST> <NodeManager> <runMonitor returned, setting finished=true and notifying waiters>
[weblogic@server1 nodemanager]$
细心检查之后,发现是启动服务器的参数里没有加载上-XnoOpt参数,于是手动去WEB上的启动参数加了之后问题解决

最后
该问题比较难遇到:
一是所的软件版本太老,如果买了维保升级了的话,不会遇到该问题;
再就是特定的JDK版本+换新CPU才会触发,这种情况应该不会太多。
以上仅记录解决办法,过程太乱了,我研究了小半个月,好在是解决了。
发出来供大家参考。
想想上次研究weblogic 集群这类东西我还是在8-9年前了,自从国产化开始我就只能沦落到修电脑了,哈哈。