我们有一些大文件 (大约 100k)。
有时响应时间非常慢(100 秒)..
为什么 ?
我是一个糟糕的服务器管理员。
那么你能帮助我吗?
信息如下:
- httpd一个进程有10MB
- 内存是4G
<IfModule mpm_prefork_module> StartServers 300 MinSpareServers 10 MaxSpareServers 300 ServerLimit 1000 MaxClients 1000 MaxRequestsPerChild 9999 </IfModule>
最佳配置是什么?MaxClients 太多了吗?
答案1
没有几乎您的问题中的信息足以让我提供充分的帮助。不过我可以为您的 prefork 配置提供一些建议。
首先,你当然您的 httpd 进程大小全部为 10MB?如果是这样,那很好,但这比我在实践中经常看到的要小得多,实际大小从 25MB 到几百MB 不等 (mod_php)。
假设您的 httpd 进程确实是 10MB,您的ServerLimit
和MaxClients
设置将允许 Apache 启动 1000x10MB 进程。这是 10GB 的 RAM。您的机器没有这个,它会交换。如果您的机器正在交换,那么您基本上就死定了,这可能是您看到的速度缓慢的原因。
(使用top
、free
、 和vmstat
命令查看交换使用情况)
现在,你的其他设置StartServers
意味着你正在启动价值 3GB 的 Apache Workers,就在你开始Apache。在 4GB 的机器上,这种情况很可能发生不是你想要什么。根据你操作系统的占用空间,你可以轻松地用这个来交换盒子。
会心关于你的申请,绝对没有其他内容我建议尝试以下设置:
<IfModule mpm_prefork_module>
StartServers 10
MinSpareServers 10
MaxSpareServers 50
ServerLimit 200
MaxClients 200
MaxRequestsPerChild 9999
</IfModule>
如果这还不够,并且您看到由于 Apache 命中导致请求开始丢失,ServerLimit
您可以尝试稍微增加这个数字,但我不会超过 300。如果这仍然不够,那么您需要水平扩展(更多 Web 服务器)或垂直扩展(更多 RAM)。
答案2
问题很困惑。
服务器数量的正确值根据配置和使用情况以及系统资源而有很大差异。
开始记录 httpd 进程的数量和系统上的可用内存(您不知道它运行在什么操作系统上 - 如果是 Linux,您将查看“free”命令的第二行输出)。绘制一个图表 - 请注意,如果您到达可用内存全部用完的点 - 这意味着所有磁盘缓存都已用完 - 当您接近该点时,性能将迅速下降。
学习如何调优网络服务器需要写几本厚厚的书——这还只是在您开始研究操作系统之前——这里的人愿意提供帮助——但如果这对您很重要,那么您可能不得不花钱请人来更详细地研究这个问题。至少考虑买一本关于这个主题的好书,花点时间自己学习。
这个配置看起来是为了应对相对较高的流量 - 但你真的应该考虑降低 maxRequestsPerChild。