为了减轻Apache的负担,人们经常建议使用lighttpd来提供静态内容。

e.g。 http://www.linux.com/feature/51673

在此设置中,Apache通过mod_proxy将静态内容请求传递回lighttpd,同时自动提供动态请求。

我的问题是:这如何减少服务器上的负载?由于每个请求都会产生一个apache进程,这对负载有何影响?从我可以看到,通过lighttpd代理其请求的Apache进程的大小与它为文件本身提供服务时一样大。

有帮助吗?

解决方案

在 Apache后面运行Lighttpd 来提供静态文件肯定对我来说是个脑子。 Apache仍然必须解压缩HTTP数据包并通过其解析树解析请求,发送代理请求,然后Lighttpd必须重新解压缩,命中文件系统并通过Apache发回文件。我从来没有听说有人在制作中使用这样的设置。

您会看到,人们使用像 Nginx 这样的轻量级网络服务器作为前端服务器为Apache提供静态文件和代理动态URL。或者,您可以运行 Varnish Squid 作为缓存反向代理前端,以便所有高流量的静态文件(即图像,CSS等任何动态页面''我愿意为缓存友好的标题发送内存服务。

Apache也可以进行优化以提供静态文件 - 所以当我听到人们抱怨Apache时,他们真的不知道如何配置它。他们只使用了prefork MPM(与线程或工作者相比)并且启用了各种模块(通常它们是从Linux发行版的厨房接收器Apache程序包运行的,它将所有内容构建为模块并默认启用10-20模块或更多)。通过关闭不需要的模块/愚蠢的功能来调整Apache,例如支持.htaccess(这使Apache在每个请求上扫描文件系统!)。 (您还可以运行Apache的两个实例,其中“轻”Apache作为前端代理到“重”Apache用于动态请求...也许您的前端是线程化的但是您的后端是prefork因为您必须运行线程-unsafe外部模块,如mod_php。)

回复:

  

因为你还有一个apache进程   产生的每一个请求都会产生   在,这是如何产生积极影响的   负载?从我可以看到的大小   Apache进程代理它的   通过lighttpd请求同样大   因为它将服务于   归档。

如果您在每个请求中生成进程,那么这意味着您正在使用prefork MPM。请记住,当操作系统报告每个进程的内存使用情况时,并非所有内存都已连接,很多进程都处于空闲状态。当你谈论速度时,你更关心的是请求解析和给定请求的内部代码分支(服务器处理多少处理?)而不是操作系统报告的内存使用情况。

例如,如果你启用类似mod_php的东西,那么每个工作进程将立即上升大约20-40M(取决于PHP解释器中启用的内容),但这并不意味着Apache正在使用静态请求上的内存。当然,如果你在小型静态文件上优化服务器以获得最大的并发性,那么启用mod_php仍然会非常糟糕,你将无法在RAM中安装几乎同样多的prefork进程。

我可能会想出一个“噩梦配置”。对于Apache来说使其实际上比静态文件更慢,而不是将这些请求代理到后端Lighttpd,但它会涉及启用Apache中的.htaccess等昂贵的功能,这些功能在Lighttpd中被禁用,所以它不会真的很公平。

其他提示

  1. 如果你仍然有权从同一台机器中提供来提供静态和动态内容(就像你在参考文章做),那么我真的觉得这个设置没有意义。
  2. 也许它确实减少了Apache的负载,因为它不必对磁盘执行IO,但它会增加同一台机器上的Lighttpd负载,从而减少了 >可用加载到apache ...
  3. 也许Lighttpd IO访问比Apache 1.3更轻,但为什么不直接切换到Apache 2或Lighttpd?如果性能真的开始糟糕,请将静态文件托管在另一台机器上(media.yourdomain.com)。
  4. 我在这里找到了如何进行高性能设置的简介: 部署Django - >在结束之前滚动到 Scaling 某个页面

我对Apache的内部运作知之甚少,但我看到的一个解释是关于内存压力。简而言之,Apache试图平衡它用于缓存和动态页面的内存;但通常最终会有太多的缓存和太少的应用程序。如果将它们分成不同的流程,每个流程都会根据负载类型进行优化。

目前,我正在做的是使用 nginx 作为前端。它真的快而轻,专门设计为前端代理;但也提供静态文件。事实上,既然它也可以调用FastCGI进程,你可以摆脱Apache并仍然可以获得分割文件/应用程序进程的好处。 (还有一些额外的 memcached magic 看起来绝对天才)

(是的,lighttpd也可以用作Apache和/或FastCGI的前端)

您没有为每个请求生成Apache进程 - lighttpd直接获取静态文件(图像等)。

使用Apache MPM Worker fastcgi这将降低服务器内存使用量。 MPM工作者提供比Prefork更好的静态内容,并且在静态内容方面几乎与lighttpd相当。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top