WebLogic 更换服务器后java segmentation fault错误解决记录

问题背景

事情是这样,有个客户的系统原有在华为老版本的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年前了,自从国产化开始我就只能沦落到修电脑了,哈哈。

相关推荐
1024小神2 小时前
Express.js中间件Middleware是处理 HTTP 请求和响应以及jwt token认证
http·中间件·express
名誉寒冰2 小时前
AI云存储学习笔记:小文件优化 / 大文件分片 / 分享与 AI 搜索
linux·人工智能·笔记·学习
kubernetes-k8s2 小时前
计划开始学习:OpenStack从入门到精通
linux·运维·服务器
天码-行空2 小时前
【大数据环境安装指南】ZooKeeper搭建spark高可用集群教程
大数据·linux·运维·zookeeper·spark
无垠的广袤2 小时前
【上海晶珩睿莓 1 单板计算机】物联网环境监测终端
linux·python·嵌入式硬件·物联网·mqtt·home assistant
Dovis(誓平步青云)2 小时前
《拆解Linux中的IP协议与数据链路层:地址、路由与分片的底层逻辑》
linux·网络·tcp/ip
qq_447429412 小时前
Gemini CLI 非交互模式工具调用机制详解
linux·运维·服务器
代码游侠2 小时前
复习——SQLite3 数据库
linux·服务器·数据库·笔记·网络协议·sqlite
chenyuhao20244 小时前
Linux网络编程:传输层协议UDP
linux·服务器·网络·后端·udp