症状
1 2 |
[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停打,最后一条日志一般是:
1 |
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命令检查发现系统日志卷文件损坏错误:
1 2 3 |
[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天多都没有再发生,应该是确认可以解决的:
- 关掉journal压缩配置项:vi /etc/systemd/journald.conf,把#Compress=yes改成Compress=no,之后systemctl restart systemd-journald即可
- 升级systemd版本,我升级到systemd-219-42.el7_4.4.x86_64,之后systemctl restart systemd-journald,也应该可以解决