温馨提示×

ubuntu java报错怎么排查

小樊
32
2026-09-01 04:52:13
栏目: 编程语言

在 Ubuntu 上排查 Java 报错,可以按**“看现象 → 看日志 → 看环境 → 看代码/依赖”**的思路来。下面是一套比较通用的排查方法。


一、先看报错信息本身

1. 保存完整报错

不要只看最后一行,要看完整 stack trace

java -jar app.jar

或后台运行时:

journalctl -u your-service
cat logs/error.log

重点关注:

  • Exception in thread "main"
  • Caused by:
  • NoClassDefFoundError
  • UnsupportedClassVersionError
  • Permission denied

二、确认 Java 环境

2. 检查 Java 是否安装

java -version
javac -version

如果没有:

sudo apt update
sudo apt install openjdk-17-jdk

3. 检查 JAVA_HOME

echo $JAVA_HOME
which java

如需设置:

export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH

(可写入 ~/.bashrc/etc/profile


三、常见错误分类排查

✅ 1. UnsupportedClassVersionError

原因:编译版本高于运行版本
例:用 JDK 17 编译,用 JDK 8 运行

解决:

java -version

统一 JDK 版本,或重新用低版本编译。


✅ 2. NoClassDefFoundError / ClassNotFoundException

原因

  • 依赖未打包
  • classpath 错误

排查:

jar tf app.jar | grep ClassName

运行指定 classpath:

java -cp "app.jar:lib/*" MainClass

✅ 3. Permission denied

chmod +x app.jar

或端口权限(如 80):

sudo setcap CAP_NET_BIND_SERVICE=+eip /usr/lib/jvm/.../bin/java

✅ 4. 端口被占用

sudo netstat -tunlp | grep 8080
sudo lsof -i:8080

✅ 5. 内存溢出(OOM)

报错:

java.lang.OutOfMemoryError

查看:

free -h

启动时限制:

java -Xms512m -Xmx1024m -jar app.jar

四、后台运行 & 日志

6. 使用 nohup / systemd

nohup java -jar app.jar > app.log 2>&1 &

或 systemd:

sudo journalctl -u your-app -f

五、高级排查(卡死 / 性能问题)

7. 查看 Java 进程

jps
top -p <pid>

8. 线程 & 堆分析

jstack <pid>
jmap -heap <pid>

六、你可以这样发给我帮你查

如果你愿意,可以直接把完整报错贴出来,并告诉我:

  1. Ubuntu 版本
  2. Java 版本
  3. 怎么运行的(jar / tomcat / IDE)
  4. 报错完整日志

我可以帮你精准定位原因

0