Java日志在CentOS上的故障排查步骤
小樊
32
2025-12-09 17:23:31
Java日志在CentOS上的故障排查步骤
一 快速定位与初步检查
- 确认进程与启动方式:使用命令查看 Java PID、启动用户、JAR/主类、工作目录、启动参数,例如:
- ps -ef | grep java
- 若为 systemd 服务:systemctl status your-app.service
- 找到日志文件位置:常见路径为应用目录下的 logs/,或应用配置中指定的 logging.file.name(如 Spring Boot),以及容器日志如 catalina.out(Tomcat)。优先查看这些文件的最新输出。
- 实时查看与关键字过滤:
- tail -f /path/to/app.log
- grep -i “ERROR|Exception” /path/to/app.log
- 若通过 systemd 托管:journalctl -u your-app.service -f
- 检查系统层面线索:/var/log/messages、内核日志等可能包含 OOM、磁盘、权限、网络 等系统级异常。必要时用 journalctl 按时间或优先级过滤。
二 常见故障场景与对应处理
- 日志框架冲突与配置错误:项目中若同时引入 Log4j、Logback、SLF4J 等,易出现重复输出或初始化失败。处理要点:
- 保证依赖唯一、桥接正确(如 log4j-to-slf4j、jul-to-slf4j),仅保留一个最终日志实现。
- 核对配置文件名与路径(如 log4j.properties/log4j.xml、logback.xml、logging.properties)是否被正确加载。
- 日志文件不可写或路径错误:应用启动后日志不生成或写入失败,常见于 路径不存在、权限不足、磁盘已满。处理要点:
- 检查并修正日志目录权限(如 chmod/chown),确保运行用户对日志目录可写。
- 使用 df -h 检查磁盘空间,清理或扩容。
- 内存不足与 OOM:出现 OutOfMemoryError 时,先临时提升堆内存(如 -Xmx/-Xms),再抓取 heap dump 分析泄漏:
- java -Xmx2g -Xms1g -jar app.jar
- jmap 生成堆转储,使用 Eclipse MAT 分析 Dominator Tree。
- 类找不到与依赖缺失:出现 ClassNotFoundException/NoClassDefFoundError,检查 classpath、依赖打包(fat jar)、部署目录 是否一致。
- SQL 异常:核对 JDBC URL、驱动版本、账号权限、数据库连通性 与网络策略。
三 提升日志可见性与滚动管理
- 动态调整日志级别(无需重启,视框架支持):
- Log4j:Logger.getLogger(…).setLevel(Level.DEBUG);
- Logback:((Logger) LoggerFactory.getLogger(…)).setLevel(Level.DEBUG);
- 通过配置文件调整(需重启生效):
- Log4j:log4j.rootLogger=DEBUG, console, file
- Logback:…
- java.util.logging:.level=FINE,ConsoleHandler.level=FINE
- 日志轮转与保留策略:
- 使用 logrotate 防止日志无限增长,示例:
- /path/to/*.log { daily missingok rotate 7 compress notifempty create 640 appuser appgroup }
- 在应用内使用 RollingFileAppender/TimeBasedRollingPolicy 控制按大小/时间滚动与历史保留。
四 集中化与长期监控建议
- 集中式日志:在规模扩大或多机环境下,部署 ELK(Elasticsearch/Logstash/Kibana) 或 Graylog,或使用 Filebeat 将日志发往集中平台,便于检索、可视化与告警。
- 系统日志与审计:利用 rsyslog/journalctl 做统一采集与查询,必要时结合 Auditd 做安全审计。
- 监控与报表:使用 Zabbix/Prometheus 配合日志关键字或解析器(如 grok_exporter)实现主动告警与趋势分析。
五 一键排查命令清单
- 查看与跟踪:
- ps -ef | grep java
- tail -f /var/log/your-app/*.log
- journalctl -u your-app.service -f --since “10 minutes ago”
- 关键字与错误定位:
- grep -n -A5 -B5 “ERROR|Exception” /var/log/your-app/app.log
- grep -i “OutOfMemoryError” /var/log/your-app/*.log
- 系统与磁盘:
- tail -n50 /var/log/messages
- df -h;du -sh /var/log /opt/your-app
- 权限与路径:
- ls -ld /var/log/your-app /opt/your-app/logs
- namei -l /var/log/your-app/app.log
- 内存与转储:
- jstat -gc 1s
- jmap -dump:format=b,file=heap.hprof (事后用 MAT 分析)