主题切换
生产问题
一、线上Bug整体排查思路
线上出现故障优先使用日志分析定位问题,远程Debug仅作为测试环境辅助手段,生产环境禁止开启。
- 优先分析日志(核心通用方案) 业务代码埋点日志、系统异常堆栈日志、本地滚动日志文件/ELK集中日志,通过关键字、时间区间、报错堆栈锁定出错代码、入参、异常原因。
- 辅助手段:远程Debug 仅测试/预发环境允许使用,生产环境出于性能、安全风险禁止开启远程调试,用于复现线上难以本地复现的逻辑bug。
二、远程Debug完整操作流程
前置硬性条件
本地工程代码版本、分支必须与远程服务器部署代码完全一致,否则断点无法匹配、调试失效。
步骤1:远程服务配置JVM启动参数
启动Jar包时追加jdwp调试参数,开放调试端口:
shell
java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 demo.jaraddress后的5005为自定义调试端口,需与IDEA配置端口保持统一。
步骤2:IDEA配置远程调试配置
- 打开Run/Debug Configurations,点击Add New Configuration;
- 选择「Remote JVM Debug」模板;
- 配置参数:
- Host:远程服务器IP地址
- Port:和启动参数中address端口保持一致(示例5005)
- Command line arguments 自动生成对应jdwp参数,无需手动修改。
步骤3:启动远程调试
选中配置好的remote-test调试项,点击绿色Debug图标启动连接远程JVM。
步骤4:断点调试验证
在本地对应业务代码打上断点,访问远程服务接口,请求触发断点后即可查看远程运行参数、执行流程。
三、生产环境禁用远程Debug的原因
- 性能损耗:调试模式下JVM运行效率大幅下降,高并发场景容易拖垮服务;
- 安全风险:对外开放调试端口,攻击者可附加调试器读取内存敏感数据、篡改程序逻辑;
- 阻塞风险:断点停留会阻塞所有处理线程,直接导致接口超时、用户请求卡死。
四、完整总结(面试背诵版)
- 线上生产问题排查优先依靠日志检索,通过业务日志、异常堆栈定位故障,适配所有线上环境无副作用。
- 远程Debug仅用于测试环境复现疑难bug,生产环境严禁开启,存在性能、安全、阻塞三大风险。
- 远程Debug四步流程:远程Jar配置jdwp调试端口→IDEA创建Remote JVM Debug配置、填写服务器IP与端口→启动调试连接→本地打断点访问远程接口调试。
- 前提约束:本地代码必须和远程部署代码版本完全一致,否则断点无法生效。
五、面试简答
问:线上生产出现bug,你是怎么排查的? 答: 线上故障优先通过日志排查,这是生产环境最安全通用的方案:查看业务埋点日志、异常堆栈,通过关键词、时间区间检索报错信息,定位出错接口、入参与代码行。 远程Debug仅在测试环境使用,生产环境不会开启,因为会降低服务性能、存在安全漏洞,还可能阻塞用户请求。 远程调试操作流程:首先远程启动Jar包时配置jdwp开放调试端口;本地IDEA新建Remote JVM Debug配置,填写服务器IP和对应调试端口;启动Debug连接后,本地代码打断点,访问远程接口就能拦截调试,前提是本地和远程代码版本必须完全一致。