Skip to content

生产问题

一、线上Bug整体排查思路

线上出现故障优先使用日志分析定位问题,远程Debug仅作为测试环境辅助手段,生产环境禁止开启。

  1. 优先分析日志(核心通用方案) 业务代码埋点日志、系统异常堆栈日志、本地滚动日志文件/ELK集中日志,通过关键字、时间区间、报错堆栈锁定出错代码、入参、异常原因。
  2. 辅助手段:远程Debug 仅测试/预发环境允许使用,生产环境出于性能、安全风险禁止开启远程调试,用于复现线上难以本地复现的逻辑bug。

二、远程Debug完整操作流程

前置硬性条件

本地工程代码版本、分支必须与远程服务器部署代码完全一致,否则断点无法匹配、调试失效。

步骤1:远程服务配置JVM启动参数

启动Jar包时追加jdwp调试参数,开放调试端口:

shell
java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 demo.jar

address后的5005为自定义调试端口,需与IDEA配置端口保持统一。

步骤2:IDEA配置远程调试配置

  1. 打开Run/Debug Configurations,点击Add New Configuration;
  2. 选择「Remote JVM Debug」模板;
  3. 配置参数:
    • Host:远程服务器IP地址
    • Port:和启动参数中address端口保持一致(示例5005)
    • Command line arguments 自动生成对应jdwp参数,无需手动修改。

步骤3:启动远程调试

选中配置好的remote-test调试项,点击绿色Debug图标启动连接远程JVM。

步骤4:断点调试验证

在本地对应业务代码打上断点,访问远程服务接口,请求触发断点后即可查看远程运行参数、执行流程。

三、生产环境禁用远程Debug的原因

  1. 性能损耗:调试模式下JVM运行效率大幅下降,高并发场景容易拖垮服务;
  2. 安全风险:对外开放调试端口,攻击者可附加调试器读取内存敏感数据、篡改程序逻辑;
  3. 阻塞风险:断点停留会阻塞所有处理线程,直接导致接口超时、用户请求卡死。

四、完整总结(面试背诵版)

  1. 线上生产问题排查优先依靠日志检索,通过业务日志、异常堆栈定位故障,适配所有线上环境无副作用。
  2. 远程Debug仅用于测试环境复现疑难bug,生产环境严禁开启,存在性能、安全、阻塞三大风险。
  3. 远程Debug四步流程:远程Jar配置jdwp调试端口→IDEA创建Remote JVM Debug配置、填写服务器IP与端口→启动调试连接→本地打断点访问远程接口调试。
  4. 前提约束:本地代码必须和远程部署代码版本完全一致,否则断点无法生效。

五、面试简答

问:线上生产出现bug,你是怎么排查的? 答: 线上故障优先通过日志排查,这是生产环境最安全通用的方案:查看业务埋点日志、异常堆栈,通过关键词、时间区间检索报错信息,定位出错接口、入参与代码行。 远程Debug仅在测试环境使用,生产环境不会开启,因为会降低服务性能、存在安全漏洞,还可能阻塞用户请求。 远程调试操作流程:首先远程启动Jar包时配置jdwp开放调试端口;本地IDEA新建Remote JVM Debug配置,填写服务器IP和对应调试端口;启动Debug连接后,本地代码打断点,访问远程接口就能拦截调试,前提是本地和远程代码版本必须完全一致。

Powered by VitePress 1.6.4 | 持续更新中