温馨提示×

centos如何定位java日志错误

小樊
59
2026-10-14 21:15:27
栏目: 编程语言

在 CentOS 上定位 Java 日志错误,一般可以从日志文件、进程状态、系统日志、 JVM 参数几个层面入手。下面按实战流程说明。


一、先确认 Java 应用怎么运行的

不同方式日志位置不同:

  • 手动 java -jar 启动
    • 日志通常在当前目录或指定文件
  • systemd 服务
    • 日志在 journalctl
  • Tomcat / Spring Boot
    • logs/ 目录
  • Docker 容器
    • docker logs

二、常见 Java 日志位置

1. 应用自身日志

# Spring Boot / 普通 Java
/opt/app/logs/
/var/log/app/
~/logs/

# Tomcat
/opt/tomcat/logs/catalina.out

查看错误:

grep -i error /opt/app/logs/app.log
grep -i exception /opt/app/logs/app.log

2. systemd 管理的 Java 服务

# 查看服务名
systemctl list-units | grep java

# 查看日志
journalctl -u your-service.service -n 200 --no-pager

# 实时日志
journalctl -u your-service.service -f

3. Java 崩溃日志(重要)

JVM 崩溃会生成:

hs_err_pid<pid>.log

查找:

find / -name "hs_err_pid*.log" 2>/dev/null

重点看:

  • Problematic frame
  • SIGSEGV
  • OutOfMemory

三、查看 Java 进程状态

ps -ef | grep java
jps -l

如果进程挂了:

  • 看退出码
echo $?

四、OOM / 内存类错误定位

1. 是否配置 dump

JVM 参数应类似:

-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/var/log/java/heapdump.hprof

查找 dump:

find / -name "*.hprof" 2>/dev/null

2. 实时看内存

jstat -gcutil <pid> 1000

五、线程 / 死锁问题

jstack <pid> > thread.txt

重点看:

  • BLOCKED
  • deadlock

六、CentOS 系统级日志

# 系统日志
/var/log/messages

# 内核 / OOM Killer
dmesg | grep -i kill
grep -i "out of memory" /var/log/messages

如果是被 OOM Killer 杀掉:

dmesg -T | grep -i "killed process"

七、快速排查套路(推荐)

  1. 进程在不在:ps -ef | grep java
  2. 在 → jstack + 应用日志
  3. 不在 → journalctl / dmesg / hs_err
  4. 报错关键词:Exception、Error、OOM、SIGSEGV

八、示例:Spring Boot 找不到错误

journalctl -u demo.service --since "10 min ago"
grep -A 20 "Exception" /var/log/demo/app.log

如果你愿意,可以告诉我:

  • Java 运行方式(jar / tomcat / docker)
  • 错误现象(启动失败 / 运行中挂 / CPU 高)
  • 是否有报错片段

我可以给你精确到命令级的定位方案。

0 踩