SpringBoot+Nacos+MySQL微服务问题及解决方案
作者:刘一说
Java微服务启动失败排查流程:检查日志、服务状态、端口监听、网络连通、配置与Nacos同步、数据库连接、系统资源及启动参数,必要时打包诊断信息并共享文档
场景设定
你有一个 Java 微服务应用(如 your-pro.jar
),部署在 Linux 服务器上,使用:
- Nacos 作为配置中心和注册中心
- MySQL 作为数据库
- Spring Boot 框架
- 日志文件位于
/home/project-cloud/server/your-pro/module/logs/
你发现应用启动失败或无法访问,需要快速排查。
定制排查命令模板:Spring Boot + Nacos + MySQL
建议按顺序执行,每一步都可能定位到问题。
第一步:查看应用日志(定位错误根源)
# 进入日志目录 cd /home/project-cloud/server/your-pro/module/logs/ # 实时查看日志,并高亮 ERROR 和 WARN tail -f *.log | grep --color=always -E "ERROR|WARN|Exception"
关注关键词:
Failed to start
DataSource
Connection refused
Timeout
ClassNotFoundException
NoSuchBeanDefinitionException
第二步:确认应用是否在运行
# 查看 Java 进程 ps aux | grep java | grep -v grep # 或精确查找你的服务 ps aux | grep your-pro
正常输出示例:
root 1234 1.2 5.3 2345678 123456 ? Sl 10:00 0:15 java -jar your-pro.jar
如果没有输出,说明服务未启动或已崩溃。
第三步:检查端口是否监听
# 检查你的服务端口(如 9202) ss -tulnp | grep :9202 # 检查 Nacos 端口 ss -tulnp | grep :8848 ss -tulnp | grep :9848 # 检查 MySQL 端口 ss -tulnp | grep :3306
正常:显示 LISTEN
状态和 java
或 mysqld
进程
异常:无输出 → 服务未启动或端口配置错误
第四步:测试网络连通性
# 测试 Nacos 是否可达(HTTP) curl -s -w "%{http_code}\n" -o /dev/null http://10.135.10.33:8848/nacos/v1/console/health # 测试 Nacos gRPC 端口 telnet 10.135.10.33 9848 # 测试 MySQL 连通性 telnet 127.0.0.1 3306 # 测试本机服务是否响应 curl http://localhost:9202/actuator/health
如果 telnet
失败,可能是:
- 防火墙阻止
- 安全组未开放(云服务器)
- 服务未监听
第五步:检查配置文件
# 查找 bootstrap.yml 或 application.yml find /home/project-cloud -name "bootstrap*.yml" -o -name "application*.yml" 2>/dev/null # 查看配置内容(重点关注数据库和 Nacos) cat /home/project-cloud/server/your-pro/module/config/bootstrap.yml # 检查是否配置了数据库 grep -A 5 -B 2 "datasource" bootstrap.yml
确认配置中是否有:
spring: datasource: url: jdbc:mysql://... username: ... password: ... cloud: nacos: discovery: server-addr: 10.135.10.33:8848 config: server-addr: 10.135.10.33:8848
第六步:检查 Nacos 配置是否存在
# 使用 curl 查看 Nacos 配置(替换 dataId 和 group) curl "http://10.135.10.33:8848/nacos/v1/cs/configs?dataId=your-pro-test.yml&group=DEFAULT_GROUP" # 如果有权限,可加用户名密码 curl -u nacos:nacos "http://10.135.10.33:8848/nacos/v1/cs/configs?dataId=your-pro-test.yml&group=DEFAULT_GROUP"
应返回你在 Nacos 控制台配置的 yaml
内容,包含数据库配置。
第七步:检查数据库连接
# 登录 MySQL mysql -h 127.0.0.1 -u root -p # 检查数据库是否存在 SHOW DATABASES LIKE 'your_pro'; # 检查表(如果是代码生成器) USE your_pro; SHOW TABLES;
如果连接失败,检查:
- MySQL 是否启动
- 用户权限
bind-address
是否限制了 IP
第八步:检查系统资源
# 查看 CPU 和内存 top -b -n 1 | head -20 # 查看磁盘空间 df -h / /home # 查看日志目录占用 du -sh /home/project-cloud/server/*/logs/*.log
避免因磁盘满导致日志写入失败或应用崩溃。
第九步:检查服务启动命令
# 查看你是如何启动的 ps aux | grep java | grep jar # 正确示例: # java -jar your-pro.jar --spring.profiles.active=test
确保:
- 使用了正确的
--spring.profiles.active
- 没有遗漏 JVM 参数(如
-Dnacos.server.addr=...
)
第十步:一键打包诊断信息(可选)
创建一个诊断脚本 diagnose.sh
:
#!/bin/bash echo "=== 诊断时间: $(date) ===" echo echo "【1. Java 进程】" ps aux | grep java | grep -v grep echo echo "【2. 端口监听】" ss -tulnp | grep -E ":(8848|9848|9202|3306)" echo echo "【3. Nacos 健康】" curl -s http://10.135.10.33:8848/nacos/v1/console/health echo echo "【4. 磁盘空间】" df -h / echo echo "【5. 最近日志】" tail -n 20 /home/peoject-cloud/server/your-pro/module/logs/*.log | grep -E "ERROR|WARN"
运行:
chmod +x diagnose.sh ./diagnose.sh > diagnose.log
把 diagnose.log
发给同事或发到群里,快速定位问题。
总结:排查流程图
启动失败? ↓ → 查日志(tail -f) ↓ → 看进程(ps aux) ↓ → 查端口(ss -tulnp) ↓ → 测试连通(telnet/curl) ↓ → 检查配置(bootstrap.yml + Nacos) ↓ → 验证数据库 ↓ → 检查资源(CPU/内存/磁盘) ↓ → 修复并重启
建议:把这个模板保存为 troubleshoot.md
放在项目根目录,团队共享。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。