Java程序在 Ubuntu 崩溃的定位与修复
一 快速判断崩溃类型
二 定位步骤与命令清单
三 常见场景与对应处理
四 最小可用诊断配置与一键命令示例
#!/usr/bin/env bash
APP_JAR="your-app.jar"
PID=$(jps -l | grep "$APP_JAR" | awk '{print $1}')
if [ -z "$PID" ]; then
echo "未找到 Java 进程:$APP_JAR"
exit 1
fi
echo "=== 系统日志(最近20行,含 killed/java) ==="
grep -i "killed\|java" /var/log/syslog | tail -n 20
echo "=== 应用标准输出/错误输出 ==="
tail -n 200 /proc/$PID/fd/1 /proc/$PID/fd/2 2>/dev/null
echo "=== 线程快照(jstack) ==="
jstack -l $PID
echo "=== 堆摘要(jmap) ==="
jmap -histo $PID | head -n 30
echo "=== GC 概况(jstat) ==="
jstat -gc $PID
将 /var/log/myapp/ 的权限与磁盘空间提前准备好,确保 hs_err 与 Heap Dump 能写入。