在 CentOS 上定位 Java 日志/问题,一般从 日志文件、进程、JVM 参数、异常堆栈 四个方面入手。下面给你一套从入门到实战的定位思路。
/var/log/
常见路径:
/var/log/app//var/log/java//opt/xxx/logs//home/xxx/logs/如果是 Spring Boot:
logs/
app.log
application.log
ps -ef | grep java
ps -ef | grep java | grep -v grep
重点看:
-Dlogging.path-Dlogback.configurationFile-Dspring.profiles.active-Xlog:-XX:LogFile✅ 90% 的日志路径都能从启动参数找到
tail -f app.log
tail -n 500 app.log
grep -i exception app.log
grep -i error app.log
sed -n '/2025-01-20 10:00/,/2025-01-20 11:00/p' app.log
top
找到 PID 后:
top -Hp PID
拿到线程 ID(TID),转成 16 进制:
printf "%x\n" TID
再打堆栈:
jstack PID | grep -A 20 0x线程id
✅ 定位死循环、锁等待
ls -lh *.hprof
jinfo PID
重点看:
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/var/log/java/
jmap -heap PID
dmesg | tail
journalctl -xe
常见原因:
df -h
du -sh /var/log/*
<property name="LOG_PATH" value="/var/log/app"/>
<RollingFile fileName="/var/log/app/app.log"/>
logging.file.name=/var/log/app/app.log
logging.file.path=/var/log/app
✅ Java 进程是否存在
✅ 启动参数里有没有日志路径
✅ 日志文件是否正在写入
✅ 磁盘是否满
✅ 是否 OOM
✅ 是否线程死锁
你可以直接贴:
ps -ef | grep java我可以帮你 直接精确定位问题 + 给修复命令 ✅