在 CentOS 上分析 Java 日志,通常分为日志位置确认 → 日志类型识别 → 分析工具与方法 → 常见问题定位几个步骤。下面给你一套实战向的总结。
Tomcat
/var/log/tomcat/
/opt/tomcat/logs/
catalina.out
catalina.YYYY-MM-DD.log
localhost_access_log.*
Spring Boot(jar 包)
nohup java -jar app.jar > app.log 2>&1 &
日志一般在:
./app.log
./logs/app.log
systemd 管理的服务
journalctl -u your-java-service
| 类型 | 说明 |
|---|---|
| stdout/stderr | catalina.out、nohup.out |
| log4j / logback | application.log |
| GC 日志 | -Xloggc:/path/gc.log |
| 线程 dump | jstack 生成 |
| 堆 dump | jmap 生成 |
tail -f catalina.out
tail -100f app.log
grep -i "exception" app.log
grep -C 5 "OutOfMemoryError" catalina.out
grep -c "ERROR" app.log
sed -n '/2026-01-21 10:00/,/2026-01-21 11:00/p' app.log
日志特征:
java.lang.OutOfMemoryError: Java heap space
分析:
grep -A 20 "OutOfMemoryError" catalina.out
配合:
jmap -heap <pid>
jmap -dump:live,format=b,file=heap.hprof <pid>
jstack <pid> > thread.log
grep -A 30 "deadlock" thread.log
线程状态关注:
BLOCKEDWAITINGTIMED_WAITINGGC 日志示例:
Full GC (Ergonomics) 1024M->900M
分析工具:
gcviewerGCeasy(在线)开启 GC 日志:
-Xloggc:/var/log/java/gc.log -XX:+PrintGCDetails
日志中关注:
timeout
slow query
elapsed time
结合:
top -Hp <pid>
定位高 CPU 线程。
awksedgreplesscatalina.out / app.logERROR / Exceptionjstack / jmaptop, free -m)如果你愿意,可以把具体日志片段或报错信息贴出来,我可以直接帮你定位问题。