it-swarm.cn

ServerLimit,MaxClients,MaxRequestsPerChild指令的最佳值

我正在一个交通繁忙的网站上投放大量动态内容,大部分是用户生成的。

该服务器是专用服务器,总共有4个Intel®Xeon®CPU X3210 @ 2.13GHz处理器。考虑到服务器具有4GB的RAM),并且MySQL数据库在单独的服务器上运行,我需要知道ServerLimit和MaxClients Apache指令的最佳值。面板是带有CentOS的DirectAdmin。

以下是我当前的指令,但是在用户超过5k的高峰时段,注意到了一个重要的滞后-这并不是MySQL的全部错,因为页面似乎生成速度很快(我实现了页面生成时间计数器),但是时间很长连接延迟,直到页面开始响应并发送到浏览器为止。

<IfModule prefork.c>
    StartServers     800
    MinSpareServers   20
    MaxSpareServers   60
    ServerLimit      900
    MaxClients       900
    MaxRequestsPerChild  2000
</IfModule>
Timeout 90
KeepAlive On
KeepAliveTimeout 5

我应该提到的是,使用top命令监视服务器时,高峰时段的CPU使用率绝不会超过20%〜30%。那时MySQL服务器的使用率也达到30%到50%,我一直在努力解决缓慢的查询问题,但这是另一个问题。我知道这不是数据库瓶颈,因为在高峰时段加载静态页面也需要很长时间。

感谢您提供任何优化这些值的技巧。

29
andreszs

您的MaxClients太高了。您的Apache进程当前的大小是多少?乘以x900。大于4GB吗?如果是这样,机器很可能会掉期。我通常从框中的MaxClients = 2x vCPU开始(grep -c处理器/ proc/cpuinfo)。在这种情况下约为8。然后确保MaxClients x Apache进程大小不超过4GB。

您可以从此处启动MaxClients,具体取决于客户端具有的连接类型。 (拨号用户需要用勺子等),但要确保您永远不会陷入交换情况。

然后将您的最小,最大和启动服务器设置为MaxClients。在专用服务器环境中,没有必要让它们有所不同。

然后用ab做一些测试(如鹅笔记)。

24
toppledwagon

您需要获取Apache进程的平均大小。使用这个数字和您的RAM的总大小,您可以计算MaxClients指令。记住这一点:“ Web服务器永远都不必交换”( Apache Performance Tuning

使用top或htop进行监视是可以的,但是您需要使用一些监视工具(例如ganglia或munin)来更好地查看服务器的所有统计信息(cpu,ram,磁盘I/o,Apache请求,mysql慢查询等)。找到可能的瓶颈。

5
hdanniel

我建议您试用Apache的基准(ab)工具。您可以使用这些值来使它们与您的流量匹配,并查看平均负载时间等得到的响应类型。届时,您可以尝试使用要优化的设置。您应该能够熟练掌握每种性能调整的最佳性能。

我谈论您的设置并不是很谨慎,但是您也需要考虑RAM,因为听起来您正在吃很多RAM的设置。尽管那只是猜测,没有任何数据。 htop使您可以直观地阅读资源。

您的平均负载也可以说很多。我怀疑您的使用率是否比20%至30%cpu的内核总数高得多,但这是服务器实际工作辛苦程度的另一个指标。

4
goose