答案1
根据我的经验,即使在非常繁忙的服务器上,Apache 日志(子)系统也不会带来足够大的 CPU 性能损失,不值得寻找优化方法,因此如果您考虑其他可能的瓶颈,例如 I/O 和网络延迟,您的优化工作可能会更有价值。
首先,确保
HostNameLookups
在Off
您的httpd.conf
(或httpd-vhosts.conf
)文件中。当 时,此设置On
在解析 DNS 名称时会增加足够大的延迟,因此在繁忙的服务器上关闭它可能会有好处。如果您需要解析 DNS 名称以用于统计和跟踪目的,那么我建议使用具有 DNS 缓存功能并且可以完成大部分工作的基于硬件的 DNS 解析器(路由器、交换机、防火墙)异步地,然后在分析流量数据时链接到这些日志。其次,分析服务器的 I/O 性能,并检查频繁写入(IIRC Apache 实际上不会从这些日志文件中读取任何内容,它只是将内容作为文件流附加到这些日志文件中)不会占服务器可以处理的总 I/O 操作的很大一部分。主轴(硬盘),这可能会很昂贵,因此您可以考虑将这些日志分散到多个物理驱动器,而不是将它们全部写入单个驱动器。显然,如果您使用硬盘,切换到固态硬盘强烈推荐,因为它们能够实现更高的每秒输入/输出次数。另请查看以下建议Server Fault 上的这个问题。
您还可以检查是否只记录真正需要的请求。通常,对某些文件类型的请求甚至不需要,或者可以将其移动到其他更简单的日志中,这些日志不会消耗太多系统资源(即,如果您需要为其他请求记录这些数据,则不需要 DNS 解析器)。这两者都可以在您的 Apache 配置文件中设置,并且可以为每个请求节省一两微秒(可以累积)。
其他建议包括负载平衡、将一些最常访问的文件移动到另一个位置并创建自己的内容分发网络 (CDN)等等,但这些已经超出了有关 Apache 日志文件性能的问题范围。
答案2
我建议您检查/server-status
和sar -d -p
。如果您看到L - Logging
状态并且磁盘延迟较高(参见 sar 的列await
高于几十毫秒),那么您很可能会获得更好的性能,只需将数据写入磁盘上的一个位置,而不是打开数百个文件。