CentOS 上 Java 日志“异常”是一个比较宽泛的问题,常见原因主要集中在环境配置、权限、磁盘、内存、日志框架冲突、系统资源、定时任务或 OOM 等方面。下面按发生频率给你一个系统性排查思路。
Java 应用无法写入日志文件。
df -h
如果某个分区 100%:
du -sh /var/log/*
du -sh /opt/app/logs/*
✅ 解决:
即使磁盘有空间,inode 用完也会导致日志异常。
df -i
✅ 常见于:
日志目录没有写权限。
ls -ld /opt/app/logs
ps -ef | grep java
✅ 解决:
chown -R appuser:appuser /opt/app/logs
chmod 755 /opt/app/logs
hs_err_pid*.logls -lh /opt/app/
✅ 查看:
dmesg | grep -i oom
journalctl -k | grep oom
✅ 常见原因:
-Xmx 设置过大多个日志实现冲突导致日志不输出或乱码。
常见组合问题:
✅ 排查:
jar -tf your.jar | grep slf4j
✅ 正确组合示例:
检查:
logback.xml
log4j2.xml
application.yml
✅ 是否包含:
<file>/opt/app/logs/app.log</file>
SELinux 会阻止 Java 写日志。
getenforce
如果是 Enforcing:
ausearch -m avc -ts recent
✅ 临时关闭测试:
setenforce 0
✅ 永久关闭(生产不推荐):
vi /etc/selinux/config
SELINUX=disabled
使用 systemd 启动时,stdout 日志可能被吞掉。
journalctl -u your-app.service -f
✅ 建议:
看起来像“异常”。
timedatectl
✅ 解决:
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
✅ 立刻执行:
df -h
df -i
free -h
ps -ef | grep java
getenforce
journalctl -xe
你可以直接贴出:
我可以给你精确到配置级别的解决方案。