在 Linux 下调试 Java 程序,常见方式有以下几种,从最常用到高级依次说明:
适合:开发环境
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 \
-jar yourapp.jar
参数说明:
address=5005:调试端口suspend=n:启动时不暂停(n 改为 y 可等调试器连接)⚠️ 注意:
jdb -attach 5005
或
jdb YourMainClass
常用命令:
stop at com.xxx.Main:20
run
step
next
print var
适合:简单调试、无 GUI 环境
jps -l
jstack <pid>
jmap -heap <pid>
jmap -histo <pid>
jstat -gc <pid> 1000
private static final Logger log = LoggerFactory.getLogger(Xxx.class);
log.info("value = {}", value);
配合:
tail -f app.log
jmap -dump:live,format=b,file=heap.hprof <pid>
| 场景 | 推荐方式 |
|---|---|
| 开发阶段 | IDE 本地调试 |
| 服务器程序 | 远程 Debug |
| 卡死 / 死锁 | jstack |
| 内存溢出 | jmap + MAT |
| 无界面服务器 | jdb + 日志 |
如果你愿意,可以告诉我:
我可以给你更具体的调试步骤。