ServerLimit,MaxClients,MaxRequestsPerChild指令的最佳值


29

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

该服务器是专用服务器,总共有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%,我一直在努力解决缓慢的查询问题,但这是另一个问题。我知道这不是数据库瓶颈,因为在高峰时段加载静态页面也需要很长时间。

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

Answers:


24

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

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

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

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


由于某种原因,似乎我错误地确定了进程的大小...现在,我在顶部命令中看到RESIDENT SIZE apache进程的范围是10到15MB。我在某处读到,由于共享库包含在此数字中,因此“实际”大小是该大小的一半。考虑到这一点,我应该计算出我可以容纳570个7 MB大小的进程,您认为这是正确的吗?
andreszs

我建议您使用15 MB进行计算,然后开始检查指标:#http进程与内存使用情况。这将使您对MaxClients的数量有了更好的了解
hdanniel

1
我将其降低到400,甚至在高峰时段之前,结果产生了与预期相反的效果:任何低于原始值的值都会导致超时和长时间延迟。实际上,现在我将其增加到1500个客户端,并且内存使用量现在为3 GB,而平均CPU使用率为8%。当然,现在SQL Server上的负载更多了,我将在其中进行工作。
andreszs

这是我的htop命令,现在有1500个apache进程和将近100个系统进程。这具有75%的RAM使用率。a.imagehost.org/0011/htop.png 您是否应该重新考虑公式?;)
andreszs

1
这就是为什么您需要在自己的环境中进行测试的原因。我们在Apache的前面安装了http加速器,因此它们不会大量吸引移动用户。您的应用程序看起来也很轻。如果您已将负载转移到数据库,这告诉我,更多的apache进程实际上是在提供数据,而不是坐下来等待mysql连接。然后,这使我问到您允许与数据库建立多少个连接?这个数字超过您的MaxClients吗?您有5,000个并发连接吗?如果是这样,您可能想看看前面的珍珠岩。
toppledwagon

5

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

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


目前,我只有top和htop命令,而且无论如何我都无法理解其所有信息。这是昨天高峰时段的活动,似乎没有交换;请告诉我我是否输入错误:任务:总计1043,正在运行2,正在睡眠1041,已停止0,0僵尸CPU:13.8%us,1.8%sy,0.0%ni,82.1%id,0.8%wa, 0.0%hi,1.5%si,0.0%st Mem:总计4138360k,已使用3961276k,免费177084k,75016k缓冲区交换:总计2031608k,已使用1484k,2030124k免费,1836600k已缓存
andreszs

是的,您的服务器没有交换。我更喜欢真实的指标,但是如果您愿意,可以使用ab或httperf等压力工具来检查服务器可以处理的数量。对于测试,请注意MaxClients,并从一个较小的数字开始(基于15MB的假设)。
hdanniel

4

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

对我来说,谈论您的设置并不是很谨慎,但是您还需要考虑RAM,因为听起来好像您在用这些设置消耗了很多RAM。尽管那只是猜测,没有任何数据。htop使您可以直观地阅读资源。

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


问题是我对服务器管理的经验不足,所以开始尝试使用settigns并监视结果。.老实说,我从未使用过ab工具。此外,更改值还需要重新启动HTTDP,这给我的用户带来了不便,因此我宁愿避免这种情况。假设您正在向其他用户发送消息,然后单击“发送”,则出现服务器连接问题。关于CPU使用率,请参阅我之前的评论中的信息:在高峰时段,它不会超过15%。考虑到我昨天有6000个在线用户,我认为这是可以接受的。
andreszs

好吧,我绝对不希望您在生产环境中这样做。如果要测试另一台服务器(如果硬件不完全相同,则非常相似),我建议您以最少的通信时间进行此操作。ab非常易于使用,但是我绝对认为toppledwagon对计算MaxClients提供了很好的指导。一旦停止使用交换空间,您将看到明显的改进。检查httpd.apache.org/docs/2.0/programs/ab.htmlcyberciti.biz/tips/...为AB
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.