在 CentOS 7.2 服务器上,我尝试使用 echo t> /proc/sysrq-trigger 转储内核堆栈跟踪。一些堆栈跟踪未记录。我在 /var/log/messages 中看到以下错误。
7 月 5 日 13:54:51 glusterfs1 日志:错过 14295 条内核消息
似乎有些条目丢失了。我需要从此服务器找到适用的堆栈跟踪。请建议需要做什么才能不错过内核消息。
答案1
Journald 几乎记录了所有内容,并通过套接字将信息复制到 rsyslog。此套接字具有最大吞吐量。
如果你喜欢它,你可以按照这里的“解释”从源代码重新编译它
https://cgit.freedesktop.org/systemd/systemd/commit/?id=5e8b767df6e18444d5aff2987b5e5603361ed528
但你也可以通过 /etc/systemd 中的 journald.conf 限制通过套接字发送的数据量
选择
最大系统日志级别=
默认为调试,这意味着所有内容都会发送到 rsyslog。但是,从历史上看,系统日志被配置为仅输出警告和更重要的消息。因此,您可以将 journald 配置为仅将警告和更重要的日志发送到 syslog,这几乎适用于所有设置。您仍然可以通过 journalctl 命令查阅通知、信息和调试日志,但除非您必须深入研究问题,否则这些日志并不十分重要。
MaxLevelSyslog=警告
对 journald.conf 进行任何修改后,不要忘记重新启动 journald 服务
systemctl 重启 systemd-journald
另一个提到的解决方案是让 rsyslog 读取日志文件,而不是通过套接字被它淹没。但我没有找到有关如何实现此行为的任何有用信息。
仅供参考:系统日志级别(journald 也尊重该级别)
0 紧急
1 警报
2 严重
3 错误
4 警告
5 通知
6 信息
7 调试
答案2
journalctl 配置有问题。尝试将/etc/systemd/journald.conf
内容更改为
[Journal]
Compress=yes
ForwardToConsole=no
ForwardToKMsg=no
ForwardToSyslog=no
ForwardToWall=no
MaxFileSec=1h
MaxRetentionSec=1month
RateLimitIntervalSec=0
RateLimitBurst=0
Seal=yes
SplitMode=uid
Storage=persistent
SyncIntervalSec=20
SystemMaxUse=1G
RuntimeMaxUse=1G
然后重新启动systemd-journald
。