温馨提示×

centos怎么调试java应用

小樊
47
2026-10-08 16:13:47
栏目: 编程语言

在 CentOS 上调试 Java 应用,常见方式包括日志排查、本地/远程 Debug、性能与线程分析、JVM 参数调优等。下面按实用场景给你一个完整指南。


一、基础准备

1. 确认 Java 环境

java -version
which java
echo $JAVA_HOME

如果没有:

yum install java-1.8.0-openjdk-devel -y

调试工具(jstack、jmap 等)需要 devel 包。


二、查看应用日志(最常用)

1. 应用日志

tail -f /var/log/your-app/app.log

2. 系统日志

journalctl -u your-service -f

三、使用 IDE 远程调试(推荐)

1. 启动 Java 应用时开启调试端口

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

2. IntelliJ / Eclipse 配置

  • Host:CentOS IP
  • Port:5005
  • 模式:Remote JVM Debug

四、使用 JDK 自带工具(非常重要)

1. 查看 Java 进程

jps -l

2. 查看线程栈(死锁、卡死)

jstack <pid>

死锁快速检查:

jstack <pid> | grep -A 20 "Deadlock"

3. 内存快照分析(OOM)

jmap -dump:live,format=b,file=heap.hprof <pid>

分析工具:

  • Eclipse MAT
  • VisualVM

4. 实时内存/GC 情况

jstat -gcutil <pid> 1000

五、使用 VisualVM(图形化,强烈推荐)

1. 服务器端开启 JMX

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

2. 本地 VisualVM 连接

  • 添加 Remote Host
  • 输入 CentOS IP + 9010

六、性能问题排查

1. CPU 占用高

top -Hp <pid>

把线程 ID 转成 16 进制:

printf "%x\n" <tid>

再看 jstack。

2. 内存泄漏

  • jmap 定期 dump
  • 对比对象增长

七、常见 JVM 调试参数

-Xms512m -Xmx1024m
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/tmp/heap.hprof
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-Xloggc:/var/log/gc.log

八、容器 / systemd 场景

systemd 服务示例

[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
线上问题 日志 + 线程栈

如果你能告诉我:

  • Java 版本
  • 是否容器(Docker)
  • 具体问题(卡死 / OOM / CPU 高)

我可以直接给你针对性的调试命令。

0 踩