Centos7系统日志停止写入问题




症状

[root@vs-controller ~]# dmesg | tail
  - [1845983.593186] systemd-journald[803]: Failed to write entry (18 items, 614 bytes), ignoring: Cannot assign requested address

dmesg一堆这种日志,其他日志也都没了,/var/log/messages停打,最后一条日志一般是:

Dec 10 03:41:14 vs2-controller rsyslogd: [origin software="rsyslogd" swVersion="7.4.7" x-pid="1564" x-info="http://www.rsyslog.com"] rsyslogd was HUPed

执行journalctl命令检查发现系统日志卷文件损坏错误:

[root@vs-controller ~]# journalctl --verify
  - File corruption detected at /run/log/journal/6589631dddd145fbabebe28acc0a7e14/system.journal:2267648 (of 41943040 bytes, 86%)
  - FAIL: /run/log/journal/6589631dddd145fbabebe28acc0a7e14/system.journal (Cannot assign requested address)

尝试rm -rf删除这个损坏文件,/var/log/messages会恢复打印,dmesg也恢复正常输出,但没过多久就会再次出现这种问题。

我用的Centos7.2系统的systemd版本是:systemd-219-19.el7.x86_64

解决方法

首先找到原因才能解决,一开始只找到上面的删除journal文件的临时办法,后来发现不能真正解决,于是又花了大半天时间google搜索,功夫不负有心人,找到了问题原因,是systemd的一个bug,在journal需要压缩的时候就会发生这个问题,后果实在是很严重,还好已经修复了。有两种方法,我这边在两台经常发生这个问题的服务器上都实验了,跑了2天多都没有再发生,应该是确认可以解决的:

  1. 关掉journal压缩配置项:vi /etc/systemd/journald.conf,把#Compress=yes改成Compress=no,之后systemctl restart systemd-journald即可
  2. 升级systemd版本,我升级到systemd-219-42.el7_4.4.x86_64,之后systemctl restart systemd-journald,也应该可以解决

bug链接