syslog以静默方式删除日志

时间:2014-04-16 18:36:33

标签: unix freebsd syslog

我使用syslog将数据记录到文件中 - 数据非常密集,每隔几秒就会有数千行的顺序。我观察到的是遗漏了痕量的原木 - 大部分时间都不到0.1% - 但它们仍然缺失。我没有解释为什么会发生这种情况。

它似乎没有直接与正在写入的数据量相关联,因为增加写入的数据量并没有增加错过日志的速度。

我想知道如何调试这个 - 我们怎么能理解或确认它是否确实是syslog正在丢弃数据,如果是这样的话?

1 个答案:

答案 0 :(得分:2)

如果查看source code for syslogd,您将看到syslogd程序仅使用数据报套接字(类型为SOCK_DGRAM)。根据定义,它们是无连接的,但在流套接字的意义上也不完全可靠。

这是设计的。使用流套接字意味着syslog()调用必须等待确认它发送的消息是否已正确接收。因此,如果syslogd忙,调用syslog()的每个应用都会阻止。

Syslogd根本没有考虑到您要考虑的数据量。您可以尝试放大sysctl变量kern.ipc.maxsockbuf的值,为日志记录套接字提供更大的缓冲区。

如果您想确保捕获所有内容,请改为写入文件。