ServerLimit,MaxClients,MaxRequestsPerChild指令的最佳值

我正在运行一个交通密集的网站大量的dynamic内容,主要是用户生成的。

服务器是专用服务器,共有4个Intel(R)Xeon(R)CPU X3210 @ 2.13GHz处理器。 我需要知道ServerLimit和MaxClients apache的指令的最佳值,考虑到服务器有4GB的RAM和MySQL数据库在单独的服务器上运行。 面板是与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 

我应该提到,使用顶级命令监视服务器,CPU使用率在高峰时段永远不会超过20%〜30%。 MySQL服务器当时也有30%〜50%的使用率,而且我一直在努力修复慢速查询,但这是一个不同的问题。 我知道这不是一个数据库瓶颈,因为静态页面在繁忙时间也需要很长的时间。

任何提示,以优化这些价值将不胜感激,谢谢。

    你的MaxClients的方式太高了。 你的apache进程的当前大小是多less? 乘以900就是大于4GB? 如果是这样,机器可能会进入交换。 我通常从MaxClients = 2x vCPU(grep -c processor / proc / cpuinfo)开始。 在这种情况下,大约是8.然后确保MaxClients x apache进程大小不超过4GB。

    你可以从那里升起你的MaxClients,这取决于你的客户所拥有的连接types。 (拨号用户需要用勺子等),但要确保你永远不会陷入交换状态。

    然后将最小,最大和起始服务器设置为MaxClients。 没有必要在专用服务器环境中使它们有所不同。

    然后用ab做一些testing(如鹅的笔记)。

    你需要获得你的apache进程的平均大小。 有了这个数字和你的RAM的总大小,你可以计算MaxClients指令。 请记住:“Web服务器永远不需要交换”( Apache Performance Tuning )

    使用top或htop进行监控是可以的,但是您需要更好地查看您的服务器(cpu,ram,磁盘I / O,apache请求,mysql缓慢查询等)的所有统计信息,以及像ganglia或munin这样的监控工具。find可能的瓶颈。

    我build议玩apache的基准(ab)工具。 您可以使用这些值来将它们与您的stream量进行匹配,并查看您获得的平均加载时间等types的响应。 在这一点上,你可以玩弄你正在谈论的设置,尝试和优化它们。 你应该可以用ab来处理每个性能调整的优化性能。

    对于我来说,谈论你的设置并不是很审慎,但是你也需要考虑到你的RAM,因为听起来你正在用这些设置吃掉大量的RAM。 虽然这只是猜测没有任何数据。 htop给你一个很好的视觉阅读你的资源。

    另外你的平均负载可以说很多。 我怀疑你的使用率远高于20-30%cpu的内核总数,但是这也是你服务器实际工作难度的另一个指标。