调试与故障排除
引用文件
本文引用的文件
- README.md
- datasource.yaml
- deploy/yml/prod/application-common.yaml
- deploy/yml/prod/datasource.yaml
- docs/infra/monitor.md
- docs/infra/api-log.md
- yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/core/handler/GlobalExceptionHandler.java
- yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/prometheus/PrometheusController.java
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/util/BannerApplicationRunner.java
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/filter/grey/GrayLoadBalancer.java
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/filter/grey/GrayReactiveLoadBalancerClientFilter.java
- yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/logger/OperateLogDO.java
- yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/logger/ApiAccessLogDO.java
- arthas/readme.md
目录
简介
本指南面向 yudao-cloud 项目的开发与运维 人员,聚焦“调试与故障排除”。内容涵盖:
- 开发调试技巧:IDE 断点设置、变量监控、调用栈分析
- 日志分析方法:日志级别配置、关键日志定位、异常堆栈分析
- 性能分析工具:Arthas 火焰图、线程分析、JProfiler/VisualVM 的使用场景
- 常见问题诊断流程:启动失败、连接超时、内存溢出等
- 监控指标解读:CPU、内存、数据库连接数、消息队列积压
- 生产应急处理与预防措施
项目结构
yudao-cloud 采用微服务/单体混合架构,核心由网关与多个业务模块组成,统一通过 Nacos 注册与配置中心、Kafka 消息队列、Redis 缓存、MySQL/TDengine 存储构成。
图表来源
章节来源
核心组件
- 网关与灰度发布:基于 Spring Cloud Gateway 的灰度负载均衡与过滤器链
- 全局异常处理:Web 层统一异常捕获与提示
- 日志与监控:API 访问日志、操作日志、Druid 监控、Prometheus 服务发现
- 配置与数据源:Nacos 配置中心、多数据源(MySQL/TDengine)、Kafka 主题
- 性能分析:Arthas 火焰图、线程分析、Actuator 指标
章节来源
- yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/core/handler/GlobalExceptionHandler.java
- docs/infra/monitor.md
- docs/infra/api-log.md
- deploy/yml/prod/application-common.yaml
架构总览
系统通过网关统一入口,后端服务按业务域拆分,结合 Nacos、Redis、Kafka、MySQL/TDengine 构建可观测、可扩展的微服务体系。
图表来源
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/filter/grey/GrayLoadBalancer.java
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/filter/grey/GrayReactiveLoadBalancerClientFilter.java
章节来源
详细组件分析
网关灰度发布机制
- 版本匹配:从请求头提取版本号,筛选 Nacos 元数据中相同版本的服务实例
- 权重选择:在匹配实例中按权重随机选择
- 回退策略:无匹配或无版本头时回退到全部实例
图表来源
章节来源
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/filter/grey/GrayLoadBalancer.java
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/filter/grey/GrayReactiveLoadBalancerClientFilter.java
全局异常处理
- Web 层统一捕获异常,对未开启模块给出明确提示
- 引导用户参考文档,避免误以为接口缺失
图表来源
章节来源
Prometheus 服务发现
- 通过 Actuator 暴露服务发现接口,Prometheus 抓取各服务实例
- 便于统一采集指标,构建监控大盘
图表来源
章节来源
日志与监控体系
- 操作日志:记录用户关键业务操作,便于审计与复盘
- API 访问日志:记录请求/响应、耗时、结果码,支持导出与检索
- Druid 监控:数据库连接池、慢 SQL、防火墙等
- 监控中心:Redis/Mysql/Kafka/ES/Nacos/XXL-Job/Grafana/Docker 等集成
图表来源
- yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/logger/OperateLogDO.java
- yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/logger/ApiAccessLogDO.java
章节来源
依赖分析
- 配置加载顺序:公共配置 → 数据源 → 环境配置 → 应用级 Nacos 配置
- 多数据源:MySQL(业务库)、TDengine(时序/日志)、Kafka(消息队列)
- Actuator 暴露端点:统一开放所有端点,便于监控采集
图表来源
章节来源
性能考虑
- Arthas 火焰图:CPU/内存采样、线程热点定位
- JProfiler/VisualVM:堆分析、GC、线程、CPU 使用率
- 灰度发布:基于版本头的流量分流,降低风险
- 监控指标:Actuator 指标 + Prometheus + Grafana
章节来源
故障排除指南
一、开发调试技巧
- IDE 断点设置
- 在网关过滤器与业务控制器关键节点设置断点,观察请求头(如版本头)与实例选择逻辑
- 在全局异常处理器处设置断点,捕获未开启模块的异常分支
- 变量监控
- 观察请求头、Nacos 元数据、实例权重、返回的目标实例
- 在异常处理器中查看异常消息与日志级别
- 调用栈分析
- 结合灰度负载均衡与过滤器链,定位请求转发路径与异常抛出位置
章节来源
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/filter/grey/GrayLoadBalancer.java
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/filter/grey/GrayReactiveLoadBalancerClientFilter.java
- yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/core/handler/GlobalExceptionHandler.java
二、日志分析方法
- 日志级别配置
- 在公共配置中设置日志级别,如 Web 层、安全过滤器、Kafka 消费器等
- 关键日志定位
- API 访问日志:按应用名、请求方法、URL、耗时、结果码检索
- 错误日志:按异常名、异常时间、处理状态检索,查看堆栈详情
- 异常堆栈分析
- 使用全局异常处理器捕获的异常进行分类处理,结合 Trace ID 关联访问日志与错误日志
章节来源
三、性能分析工具使用
- Arthas 火焰图
- CPU/内存采样、线程热点、Top 线程查看
- 常用命令:dashboard、profiler start/stop、thread -n 10
- JProfiler/VisualVM
- 堆分析、GC、线程、CPU 使用率
- 适用于生产环境远程 attach(需配合安全策略)
章节来源
四、常见问题诊断流程
1) 启动失败
- 检查环境依赖:JDK 17+、MySQL 8.0+、Redis 5.0+、Nacos 2.x、TDengine、Kafka
- 查看网关 Banner 与模块日志,确认注册中心连通性
- 核对配置加载顺序与命名空间
章节来源
2) 连接超时
- 数据库连接池:检查 Druid 连接池配置(初始/最小/最大连接数、等待超时、空闲检测)
- Kafka:检查消费者组、主题是否存在、反序列化配置
- Redis:确认连接参数与密码
章节来源
3) 内存溢出
- 使用 Arthas 查看堆与 GC 情况,定位大对象与泄漏点
- 结合线程分析,排查死锁、长时间阻塞线程
- 优化缓存策略与连接池参数
章节来源