如何优化 Apache 提供静态内容的速度?

如何优化 Apache 提供静态内容的速度?

我很清楚 ngix 更适合静态内容,但我不能使用它。否则我可以完全访问我的服务器 (VPS)。

我发现了许多关于优化 Apache 的文章和帖子,但总是涉及 PHP 应用程序的性能。

我正在使用最新的 Apache 2.4.7

我已经在使用 MPM。我正在考虑调整活着 最大客户数等等(静态内容)的性能,如果有意义的话?

答案1

在尝试调整 Apache 之前,请确保您已安装适当的监控,以便您可以查看 Apache 处理的请求数以及系统资源之间的相互关系。一个易于使用的解决方案是穆宁

接下来,准备负载测试,让系统承受负载,看看不同的调优选项有什么效果。有很多解决方案,从非常简单的AB超过JMeter到非常复杂的基于云的解决方案,您可以用它们模拟来自世界各地的数千名访问者。搜索“网站负载测试”,您会找到很多解决方案。

最后,以下是我认为在调整 Apache 时重要的几点:

  • 删除未使用的模块:用于查看已加载哪些模块。如果不需要,则应删除apache2ctl -M已标记的模块。这将减少 Apache 的内存占用,并让您的操作系统将可用 RAM 用于其他目的(例如缓存)。(shared)

  • 不要使用.htaccess文件:将所有设置放入 Apache 配置中,并进行设置,这样 Apache在处理请求时AllowOverride None就不必查找文件并解析它们。.htaccess

  • 明确允许符号链接:通过设置,Options +FollowSymLinks -SymLinksIfOwnerMatch您可以告诉 Apache 允许符号链接,这样它就可以自由地提供它读取的文件,而不必验证它们是否是符号链接。这可以节省一些系统调用。

  • 根据您的监控需求,考虑关闭ExtendedStatus:这将节省一些系统调用,但会提供较少的监控信息。不确定是否真的值得。

  • 避免过多日志记录:记录每个请求可能会导致相当多的 I/O。使用选择性日志记录,您可以控制要记录哪些请求。以下内容将仅记录以 .html 结尾的 URL 的请求:

    SetEnvIf Request_URI ".html$" dolog
    CustomLog /var/log/apache2/access.log combined env=dolog
    
  • 如果您不需要 SSL,请考虑使用 Event MPM,它使打开的连接(例如由于保持连接)得到更高效的处理。如果您需要 SSL,Event MPM 的功能与 Worker MPM 相同。请参阅如何选择使用哪个 Apache MPM?有关不同 MPM 模块的更多信息。

  • 压缩甚至预压缩数据:使用 mod_deflate 可以在将内容发送到客户端之前对其进行压缩。由于您拥有静态数据,因此预压缩内容可能比反复压缩相同的数据更值得。请参阅http://httpd.apache.org/docs/2.4/mod/mod_deflate.html#precompressed如何实现这一目标。

  • 调整操作系统:使用大型 TCP 写入缓冲区,这样只需更少的系统调用即可将请求的数据提交给客户端。还要确保打开文件的最大数量足够高,这样 Apache 就不会达到该限制。

答案2

KeepAlive 通常很有意义,它需要更多内存,但会降低连接数、CPU 使用率和连接开销。MaxClients 和其他内容必须根据您的情况进行调整。通常,您希望 Apache 拥有足够多的空闲实例来为所有用户提供服务,而无需它一直产生新的子进程;同时,您希望避免 maxclients 的值过大,以控制内存使用量。除非您突然出现使用量高峰,否则默认的 Apache 设置通常就足够了,并且可以很好地自我适应您的环境。

如果您通过 https 提供内容,并且由于您没有使用 php,您可能也想尝试 mod_spdy 模块,许多浏览器已经支持该模块(等待对 http 2.0 的全球支持)。

最后,另一个选择是使用缓存/预缓存。在这方面,Apache 中已经提供了一些功能,这要归功于几个模块(请参阅http://httpd.apache.org/docs/2.4/caching.html),或者你可以在服务器前面放些别的东西(Varnish 是一个流行的选择)。

相关内容