Seata Server 启动问题总结与解决方案
概述
在尝试启动 Seata Server 时,遇到了几个常见的问题。本文将详细描述这些问题的原因,并提供相应的解决方案,以帮助其他开发者顺利部署和运行 Seata Server。
- 初始问题:直接使用 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
- 使用不兼容的 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 &
- 确认服务启动状态
检查日志输出:
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”
总结
通过上述步骤,我们解决了以下问题:
- 缺少依赖库路径配置:使用 -Dloader.path 参数正确加载 Seata Server 所需的依赖库。
- JVM 参数不兼容:移除了与 CMS GC 相关的参数,并更新了适用于 JDK 17 的垃圾收集器配置。
- 确认服务启动状态:通过日志和端口检查,确保 Seata Server 已经成功启动并正常运行。
希望这篇博客能帮助您更好地理解和解决 Seata Server 在启动过程中可能遇到的问题。如果有任何疑问或进一步的需求,请随时留言讨论!
共同学习,写下你的评论
评论加载中...
作者其他优质文章