Java应用在Ubuntu无法启动的排查与修复
一 快速定位
java -version、javac -version。ls -l /path/to/app.jar;若报“Unable to access jarfile”,多半是路径错误或文件不存在。tail -f /path/to/app.log 实时查看;系统级问题可查 tail -n 100 /var/log/syslog。chmod +x /path/to/app.jar 或调整属主 chown youruser:yourgroup /path/to/app.jar。二 常见错误与对应修复
java: command not foundsudo apt update && sudo apt install default-jdk),或正确设置 JAVA_HOME 与 PATH。Error: Unable to access jarfile /path/to/app.jarError: Could not find or load main class xxxUnsupportedClassVersionErrorNoClassDefFoundError: javafx/application/Application--module-path <javafx-sdk>/lib --add-modules javafx.controls,javafx.fxml(或按构建工具配置)。Permission deniedchmod +x app.jar,或以具备权限的用户运行。三 环境与自启动问题
~/.bashrc、~/.profile 或 /etc/profile 中配置export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
使配置生效:source ~/.bashrc 或 source /etc/profile。#!/bin/bash
source /etc/profile
java -jar /opt/myapp/app.jar >/var/log/myapp.log 2>&1 &
同时确保脚本与日志目录具备合适权限。四 资源与稳定性排查
free -m、df -h),必要时调小 -Xmx/-Xms,或为 OOM 生成 Heap Dump 分析(如 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/dump)。top/htop 观察 CPU/内存占用;确认第三方库版本兼容、最近变更未引入致命缺陷。五 一键诊断脚本模板
将以下脚本保存为 check-java.sh,赋予可执行权限 chmod +x check-java.sh,按需替换 APP_JAR 与 JAVA_HOME 后执行,可快速定位常见问题。
#!/usr/bin/env bash
set -e
APP_JAR="/opt/myapp/app.jar"
JAVA_HOME="${JAVA_HOME:-/usr/lib/jvm/java-11-openjdk-amd64}"
JAVA="$JAVA_HOME/bin/java"
echo "=== 1) Java 版本 ==="
"$JAVA" -version 2>&1 || { echo "未找到 Java,请安装 JDK 或设置 JAVA_HOME"; exit 1; }
echo "=== 2) JAR 文件检查 ==="
ls -l "$APP_JAR" || { echo "JAR 不存在或路径错误: $APP_JAR"; exit 1; }
echo "=== 3) 权限检查 ==="
[ -r "$APP_JAR" ] || { echo "JAR 不可读,请检查权限"; exit 1; }
echo "=== 4) 环境变量 ==="
echo "JAVA_HOME=$JAVA_HOME"
echo "PATH=$PATH"
echo "=== 5) 尝试启动(前台 10 秒)==="
timeout 10s "$JAVA" -jar "$APP_JAR" || { echo "启动失败,请查看上方输出与应用日志"; exit 1; }