继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

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

王家大少
关注TA
已关注
手记 48
粉丝 27
获赞 81

概述

在尝试启动 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 在启动过程中可能遇到的问题。如果有任何疑问或进一步的需求,请随时留言讨论!

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP