apache2.2响应问题

我们有一些沉重的文件(大约100k)。

有时响应时间很慢(100s)..

为什么?

我是一个可怜的服务器pipe理员。

你能帮我吗?

信息如下:

  1. httpd一个进程有10MB
  2. RAM是4G
<IfModule mpm_prefork_module> StartServers 300 MinSpareServers 10 MaxSpareServers 300 ServerLimit 1000 MaxClients 1000 MaxRequestsPerChild 9999 </IfModule> 

什么是最好的configuration? MaxClients太多了?

在你的问题中没有足够的信息让我充分有用。 不过,我可以给你一些关于preforkconfiguration的指针。

首先,你确定你的httpd进程在10MB的权重? 如果是这样的话,那真是太好了,但是这比我在实践中经常看到的要低得多,从25MB到几百(mod_php)。

假设你的httpd进程真的是10MB,你的ServerLimitMaxClients设置将允许Apache启动1000x10MB的工作。 这是10GB的RAM。 你的机器没有这个,它会交换。 如果你的机器正在交换,那么你基本上死在水中,这可能是你看到的缓慢的解释。

(使用topfreevmstat命令来查看交换使用情况)

现在你的其他设置StartServers意味着当你启动 Apache的时候,你正在旋转3GB的Apache工作。 在4GB的机器上,这很可能不是你想要的。 根据您操作系统的占用空间,您可以轻松地将盒子与此交换。

完全不知道你的应用程序,我会build议尝试下面的设置:

 <IfModule mpm_prefork_module> StartServers 10 MinSpareServers 10 MaxSpareServers 50 ServerLimit 200 MaxClients 200 MaxRequestsPerChild 9999 </IfModule> 

如果这是不够的,你看到请求开始被丢弃,由于Apache命中ServerLimit你可以尝试增加这一点,但我不会超过300.如果这仍然不足,那么你需要水平缩放(更多networking服务器)或垂直(更多的RAM)。

这个问题很混乱。

服务器数量的正确值根据configuration和使用情况以及系统资源而大不相同。

开始logginghttpd进程的数量和系统上的空闲内存(你没有运行什么操作系统 – 如果是Linux,你可以看看从“free”命令输出的第二行) 。 画出一张图 – 注意,如果你达到了空闲内存全部用完的地步 – 这意味着所有的磁盘caching已经用完了,而且就在这个点附近时,性能会迅速下降。

学习如何调整networking服务器将会填满几本大型的书籍 – 在开始研究操作系统之前 – 这里的人们愿意提供帮助 – 但是如果它对你很重要,那么你可能需要花时间去购买仔细看看这个。 至less考虑买一本关于这个话题的好书,花时间学习一下自己。

这个configuration看起来像是为了应付相对较高的stream量 – 但你应该考虑降低maxRequestsPerChild。