温馨提示×

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 分析)

0