在 CentOS 上调试 Java 应用,常见方式包括日志排查、本地/远程 Debug、性能与线程分析、JVM 参数调优等。下面按实用场景给你一个完整指南。
java -version
which java
echo $JAVA_HOME
如果没有:
yum install java-1.8.0-openjdk-devel -y
调试工具(jstack、jmap 等)需要 devel 包。
tail -f /var/log/your-app/app.log
journalctl -u your-service -f
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 \
-jar yourapp.jar
CentOS 防火墙需要放行端口:
firewall-cmd --add-port=5005/tcp --permanent
firewall-cmd --reload
jps -l
jstack <pid>
死锁快速检查:
jstack <pid> | grep -A 20 "Deadlock"
jmap -dump:live,format=b,file=heap.hprof <pid>
分析工具:
jstat -gcutil <pid> 1000
java -Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=9010 \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-jar yourapp.jar
top -Hp <pid>
把线程 ID 转成 16 进制:
printf "%x\n" <tid>
再看 jstack。
-Xms512m -Xmx1024m
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/tmp/heap.hprof
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-Xloggc:/var/log/gc.log
[Service]
ExecStart=/usr/bin/java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar /opt/app.jar
| 问题类型 | 推荐方式 |
|---|---|
| 逻辑错误 | 远程 Debug |
| 卡死/死锁 | jstack |
| OOM | jmap + MAT |
| 性能差 | VisualVM / jstat |
| 线上问题 | 日志 + 线程栈 |
如果你能告诉我:
我可以直接给你针对性的调试命令。