环形缓冲区、消息队列和写缓冲区是否相同?如果不是,环形缓冲区、队列和写缓冲区如何在 syslogd 或 rsyslogd 中一起工作?
syslogd 的大多数实现队列消息 并处理在此期间到达队列的重复消息。
每次写入文件时与磁盘的同步可以延迟,以加快写入速度,例如,通过
-
在 中添加文件名/etc/syslog.conf
*.debug;mail.none;news.none -/var/log/messages
当 syslogd 或 rsyslogd 将新日志写入环形缓冲区时,它是否也会将相同的新日志写入文件/var/log/syslog
?在任何时候,环形缓冲区的内容是否始终是 file 内容的一部分/var/log/syslog
,还是可以位于 file 之前并使 file 内容过时?
答案1
“环形缓冲区”用于记录早期消息,即在系统日志守护进程启动之前发出的消息。这是从实时操作系统中采用的概念。
环形缓冲区数据结构只是内核内存的一个(预分配的)区域,加上几个指针。它可用于在内核启动时立即进行记录。它完全不需要资源分配,也不依赖于任何已经在工作的东西。如果系统启动时“出现问题”(达到rsyslogd
无法启动的程度),dmesg
将显示这些早期消息,这可能会有所帮助。
当 Syslog 守护进程启动时,它会读取环形缓冲区,并生成/处理日志条目。
稍后,当系统启动并运行时,syslog 守护程序会执行常规的缓冲磁盘 I/O、写入日志文件,并在每次写入后进行同步(请参阅 参考资料man 3 fflush
)。然而,如果日志文件名前面带有“ -
”,则同步将留给磁盘缓冲方案。