在 CentOS 上调试 Java 应用,常见方式包括日志排查、本地/远程 Debug、性能与线程分析、JVM 工具等。下面按实用场景给你一个系统性的指南。
java -version
which java
echo $JAVA_HOME
如未安装:
yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
ps -ef | grep java
jps -l
netstat -tunlp | grep java
ss -tunlp | grep java
tail -f /var/log/yourapp/app.log
journalctl -u yourapp.service -f
<root level="DEBUG">
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar app.jar
CentOS 7+ 注意防火墙
firewall-cmd --add-port=5005/tcp --permanent
firewall-cmd --reload
jstack <pid>
重点看:
jmap -heap <pid>
jmap -histo <pid> | head
jmap -dump:live,format=b,file=heap.hprof <pid>
用 MAT / VisualVM 分析 heap.hprof
jstat -gcutil <pid> 1000
关注:
curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar
dashboard
thread
watch com.xxx.Service method params
trace com.xxx.Service method
✅ 不改代码、不停机
top -Hp <pid>
把线程 ID 转 16 进制:
printf "%x\n" <tid>
jstack <pid> | grep <hex>
./profiler.sh -d 30 -f flamegraph.html <pid>
| 问题 | 排查方式 |
|---|---|
| 应用启动失败 | 看日志、jps、端口 |
| 卡死 | jstack |
| 内存溢出 | jmap + MAT |
| 响应慢 | arthas trace |
| CPU 高 | top + jstack |
| 配置不生效 | 确认启动参数、环境变量 |
如果你愿意,可以告诉我:
我可以直接给你针对性命令。