温馨提示×

如何读懂CentOS Java日志

小樊
43
2026-08-19 04:28:05
栏目: 编程语言

读懂 CentOS 上的 Java 日志,关键在于 知道日志在哪、日志格式是什么、如何结合系统环境分析。下面按实战思路给你一个完整指南。


一、先搞清楚:Java 日志通常有哪些?

1️⃣ Java 应用自身日志(最主要)

常见框架:

  • Log4j / Log4j2
  • Logback
  • JUL(java.util.logging)

常见文件:

/var/log/xxx/xxx.log
/opt/app/logs/app.log
~/logs/app.log

示例:

tail -f /opt/app/logs/app.log

2️⃣ 标准输出 / 标准错误(容易被忽略)

当 Java 这样启动时:

java -jar app.jar

日志可能在:

  • 终端
  • systemd 的 journal
  • nohup.out
  • 重定向文件

查看方式:

journalctl -u your-service-name -f

或:

nohup.out

3️⃣ GC 日志(JVM 级别)

如果 JVM 参数中有:

-Xlog:gc*

或老版本:

-XX:+PrintGCDetails -Xloggc:/var/log/gc.log

GC 日志常见内容:

  • Full GC
  • GC 停顿时间
  • 内存回收情况

4️⃣ CentOS 系统日志(辅助)

/var/log/messages
/var/log/syslog
journalctl -xe

用于排查:

  • OOM Killer
  • 系统资源不足
  • 服务异常退出

二、快速定位 Java 日志位置

1️⃣ 看进程

ps -ef | grep java

或:

jps -l

2️⃣ 看 systemd 服务

systemctl status your-app
cat /usr/lib/systemd/system/your-app.service

常见配置:

StandardOutput=append:/var/log/app/app.log
StandardError=append:/var/log/app/error.log

3️⃣ 搜索日志文件

find / -name "*.log" 2>/dev/null | grep -i java

三、读懂 Java 日志的关键结构

1️⃣ 日志基本格式(示例)

2026-01-21 10:32:15.123 [main] INFO  com.xxx.Service - 服务启动成功

含义:

部分 含义
时间戳 发生时间
线程 main / http-nio / pool
日志级别 INFO / WARN / ERROR
类名 日志来源
内容 真正的信息

2️⃣ 日志级别重要程度

ERROR > WARN > INFO > DEBUG

排错优先看 ERROR 和 WARN


四、常见 Java 错误怎么看?

1️⃣ NullPointerException

java.lang.NullPointerException
    at com.xxx.Service.doSomething(Service.java:45)

✅ 重点看:

  • at xxx.xxx(类名:行号)
  • 谁传了 null

2️⃣ OutOfMemoryError

java.lang.OutOfMemoryError: Java heap space

✅ 排查方向:

  • 内存泄漏
  • -Xmx 设置过小
  • 大对象

3️⃣ 线程池 / 超时问题

Timeout waiting for connection
Task rejected from thread pool

✅ 重点看:

  • 线程名
  • 并发数
  • 数据库连接池

五、CentOS 常用分析命令(必会)

实时查看

tail -f app.log

只看错误

grep -i error app.log
grep -i exception app.log

统计错误数量

grep -c ERROR app.log

查看某段时间日志

sed -n '/2026-01-21 10:00/,/2026-01-21 11:00/p' app.log

六、结合 JVM 和系统一起看(进阶)

1️⃣ 是否被系统杀掉

dmesg | grep -i oom
journalctl -k | grep -i oom

2️⃣ 查看 JVM 内存

jstat -gc <pid>

3️⃣ 查看线程

jstack <pid> > stack.txt

七、实战排错思路(推荐)

标准流程

  1. 找到 Java 进程
  2. 找到日志文件
  3. 先看 ERROR / Exception
  4. 看错误前后 50 行
  5. 结合系统日志
  6. 必要时 jstack / jmap

八、如果你想更具体

你可以直接贴:

  • 一段 Java 日志
  • 报错信息
  • 启动方式(jar / systemd / docker)

我可以 逐行帮你解读,并告诉你 下一步该查什么

0