2026/4/6 18:36:36
网站建设
项目流程
目录线上问题定位通用排查思路接口报错 / RT 超时程序卡死 / CPU 飙高死锁问题排查线上问题定位接口报错看日志分布式用 SBA/ELKCPU 飙高用 topjstack 或 Arthas死锁用 jstack 或 Arthasthread -b直接检测。通用排查思路项目上线后问题排查分两种情况有运维运维拉取运行日志开发结合日志 源码定位问题修复后重新部署。无运维开发直接操作生产服务器根据问题类型接口报错、RT 超时、CPU 飙高、程序卡死、死锁、OOM 等采用不同方案。接口报错 / RT 超时方案 1日志定位基础方案使用 Spring Boot 默认logback将error级别日志输出到文件直接查看项目日志、Tomcat logs 或logs文件夹分析错误栈和调用链定位问题。方案 2监控工具排查分布式系统① Spring Boot AdminSBA架构微服务集成SBA Client定期向SBA Server上报 CPU、内存、线程、日志等信息作用实时监控微服务状态异常时自动邮件告警。② ELK 架构分布式日志采集组件Logstash采集、过滤日志Elasticsearch存储日志支持高效查询Kibana可视化展示日志、生成报表。两种架构简单架构Logstash → ES → Kibana优点是搭建简单缺点是 Logstash 耗资源、无缓存易丢数据。增强架构引入 Kafka/Redis 做消息队列缓存 → Logstash → ES → Kibana避免日志丢失更稳定。程序卡死 / CPU 飙高方案 1原生 Linux 命令排查top查看系统 CPU 占用找到高耗 CPU 的进程 PIDps -ef | grep java确认 Java 进程 IDtop -H -p查看进程内线程的 CPU 占用jstack -l导出线程栈找到高耗 CPU 的线程堆栈定位代码问题。方案 2Arthas 工具排查更高效启动java -jar arthas-boot.jar选择目标 Java 进程thread查看所有线程状态、CPU 占比定位到高 CPU 线程后查看其堆栈找到问题代码也可通过jad反编译线上代码直接分析问题。死锁问题排查死锁定义多个线程互相持有对方需要的锁导致彼此等待程序无法继续执行。方案 1JDK 原生工具jps找到 Java 进程 PIDjstack -l导出线程栈日志中会直接提示Found 1 deadlock并展示线程持有 / 等待的锁信息也可使用jconsole、jvisualvm图形化工具检测死锁。方案 2Arthas 工具thread查看线程状态找到BLOCKED状态的线程thread -b直接检测并打印死锁线程信息和堆栈jad反编译问题代码定位死锁成因如锁获取顺序不一致。