为了账号安全,请及时绑定邮箱和手机立即绑定

Seata Server 启动问题总结与解决方案

概述

在尝试启动 Seata Server 时,遇到了几个常见的问题。本文将详细描述这些问题的原因,并提供相应的解决方案,以帮助其他开发者顺利部署和运行 Seata Server。

  1. 初始问题:直接使用 java -jar 命令启动失败

现象:

Exception in thread “main” java.lang.reflect.InvocationTargetException

Caused by: java.lang.NoClassDefFoundError: org/springframework/boot/SpringApplication

原因分析:

Seata Server 是一个 Spring Boot 应用程序,它依赖于外部的库文件(位于 lib 目录)。直接运行 java -jar seata-server.jar 会导致 JVM 找不到这些依赖库,从而抛出 NoClassDefFoundError 异常。

解决方案:

需要通过 -Dloader.path 参数指定依赖库的位置。例如:

/home/boot/jdk-17.0.12+7/bin/java -server
-Dloader.path=/home/boot/software/seata-server-2.0.0/lib

-jar /home/boot/software/seata-server-2.0.0/target/seata-server.jar

  1. 使用不兼容的 JVM 参数导致启动失败

现象:

Unrecognized VM option 'CMSParallelRemarkEnabled’
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

原因分析:

使用的 JDK 版本是 OpenJDK 17,而 CMSParallelRemarkEnabled, UseCMSInitiatingOccupancyOnly, CMSInitiatingOccupancyFraction 这些参数是针对 CMS (Concurrent Mark Sweep) 垃圾收集器的,在 JDK 9 及以后版本中已经被弃用,并在 JDK 14 中被彻底移除。

解决方案:

移除这些与 CMS GC 相关的参数,并选择适合 JDK 17 的垃圾收集器,如 G1GC(默认)或 ZGC。修正后的命令如下:

nohup /home/boot/jdk-17.0.12+7/bin/java -server
-Dloader.path=/home/boot/software/seata-server-2.0.0/lib
-Xmx2048m -Xms2048m -Xmn1024m -Xss512k
-XX:SurvivorRatio=10
-XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m
-XX:MaxDirectMemorySize=1024m
-XX:-OmitStackTraceInFastThrow
-XX:-UseAdaptiveSizePolicy
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/home/boot/software/seata-server-2.0.0/logs/java_heapdump.hprof
-XX:+DisableExplicitGC
-Xlog:gc*:file=/home/boot/software/seata-server-2.0.0/logs/seata_gc.log:time,tags:filecount=10,filesize=102400
-Dio.netty.leakDetectionLevel=advanced
-Dapp.name=seata-server
-Dapp.pid=
-Dapp.home=/home/boot/software/seata-server-2.0.0
-Dbasedir=/home/boot/software/seata-server-2.0.0
-Dspring.config.location=file:/home/boot/software/seata-server-2.0.0/conf/application.yml
-Dlogging.config=file:/home/boot/software/seata-server-2.0.0/conf/logback-spring.xml
-jar /home/boot/software/seata-server-2.0.0/target/seata-server.jar > /home/boot/software/seata-server-2.0.0/logs/console-out.log 2>&1 &

  1. 确认服务启动状态

检查日志输出:

tail -f /home/boot/software/seata-server-2.0.0/logs/console-out.log

检查端口监听:

确保 Seata Server 正在监听所需的端口(如 8091 和 7091):
ss -tlnp | grep :8091
ss -tlnp | grep :7091

确认进程运行:

ps aux | grep “java.*seata-server”

总结

通过上述步骤,我们解决了以下问题:

  1. 缺少依赖库路径配置:使用 -Dloader.path 参数正确加载 Seata Server 所需的依赖库。
  2. JVM 参数不兼容:移除了与 CMS GC 相关的参数,并更新了适用于 JDK 17 的垃圾收集器配置。
  3. 确认服务启动状态:通过日志和端口检查,确保 Seata Server 已经成功启动并正常运行。

希望这篇博客能帮助您更好地理解和解决 Seata Server 在启动过程中可能遇到的问题。如果有任何疑问或进一步的需求,请随时留言讨论!

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
27
获赞与收藏
81

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消