我在我的机器上使用 syslog-ng 3.0。其中一台机器从其他三台机器获取日志。但最近,当我使用 top 监控 CPU 使用率(在主机器中)时,我发现 syslog-ng 使用了大约 95% 的 CPU。我在配置文件中使用了第二深度包含。这个问题可能是什么原因造成的?
提前致谢。
答案1
你问错了问题——你需要关注系统性能,而不是屏幕上的数字。
如果您的系统运行正常,性能满足您的要求,并且您的平均负载不是过高(表示进程在请求 CPU 时需要等待很长时间才能获得 CPU),那么您就没有问题需要解决。
如果你是遇到性能问题,这就是您应该向我们询问的问题(您的 CPU 被固定这一事实是偶然的,并且在尝试帮助您解决性能问题时会有所帮助)。
您没有告诉我们您谈论的是哪个“CPU 利用率”数字,但这实际上并不重要——“ 100%CPU 利用率”是一件坏事是一个常见的误解。 事实并非如此。
一台 CPU 利用率为 100% 的计算机,如果没有任何性能问题,那么不是一个问题,除非你预计未来 (在系统的生命周期内) 会出现大幅增长,从而导致可用的 CPU 带宽负担过重。
答案2
Syslog-ng 确实占用了大量 CPU 资源,但使用单个 CPU 持续显示 95% 似乎有点高。我有一个单 CPU 系统,内存不到 1Gb,运行 syslog-ng 2.1.4,用于三个防火墙(调试)和 20 多个 Linux 服务器(警告)。Top 显示 %CPU 为 93-83%。
过滤器非常灵活,但没有任何优化或逻辑检查;syslog-ng 依靠您来实现这一点。遇到类似情况后,我检查了所有过滤器的逻辑错误并优化了顺序。清理和优化使我的利用率降低了 10% 以上。我建议:
- 仅传输值得记录的事件。 将客户端的优先级设置为警告或更高。如果您需要来自特定守护进程(例如 authpriv)的信息优先级事件,请为该守护进程添加 /etc/syslog.conf 行。传输的事件越少,CPU 利用率就越低。
- 将最常使用的过滤器放在首位,尤其是如果他们消除/减少记录的事件。同样,处理的事件越少,意味着 CPU 利用率越低。
- 串联运行过滤器在日志记录指令上,而不是在单个过滤器中作为 AND 条件。尽管其中一个条件失败,但 Includes 可以并行检查两个条件。
在查看它时,请检查磁盘 I/O 等待情况,并验证您是否正在使用本机 UDP 协议(避免使用 TCP)。希望对您有所帮助。