我们有一些沉重的文件(大约100k)。
有时响应时间很慢(100s)..
为什么?
我是一个可怜的服务器pipe理员。
你能帮我吗?
信息如下:
<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,你的ServerLimit和MaxClients设置将允许Apache启动1000x10MB的工作。 这是10GB的RAM。 你的机器没有这个,它会交换。 如果你的机器正在交换,那么你基本上死在水中,这可能是你看到的缓慢的解释。
(使用top , free和vmstat命令来查看交换使用情况)
现在你的其他设置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。