Apache使用非常高负载的LAMP服务器进行调优

我有一个LAMP服务器,有时可以提供约400个请求,服务器configuration是:

CPU: Intel Quad Core Xeon X3430 (4 x 2.40 GHz, 8MB Cache) RAM: 16 GB REG ECC DDR3 HD: 500 GB Enterprise Grade SATA II OS: CentOS 64 Bit (Latest Stable) 

Apache2 preforkconfiguration:

 StartServers 128 MinSpareServers 16 MaxSpareServers 64 ServerLimit 1500 MaxClients 1500 MaxRequestsPerChild 10000 

在高峰时期,服务器负载非常高,CPU利用率在90%左右,平均负载在130左右

我不确定这是服务器硬件限制还是我的preforkconfiguration有什么问题 – 可能是什么问题?

您允许Apache产生多达1500个孩子来提供请求( ServerLimit / MaxClients ) – 难怪您的服务器负载(在运行队列中等待的进程数量)变得越来越大!

我提出的每秒400个请求的第一个build议是你的问题中引用的数字是“将MySQL服务器移到它自己的盒子”或者更好的select:“添加另一个Web服务器并且平衡你的请求”。
为了帮助您了解如何确定额外服务器的大小,请按照HDDP500在答案中给出的build议来计算Apache进程的平均大小。 找出你想在新服务器上运行多less个apache进程,并确定你需要处理多lessRAM。 请记住添加一个安全余量(一两个)。

计算CPU要求(速度/内核数量)有点困难 – 您需要考虑服务器生成每个页面所需做的工作量。 像XDebug这样的工具可以告诉你生成一个页面需要多长时间(你应该在一个卸载的服务器上执行这个testing,也可以在一个负载下执行这个testing,但是你也不应该在生产环境中使用像XDebug这样的工具服务器在大多数情况下)。

你的httpd进程的平均大小是多less?

服务器负载情况下运行该命令:

 ps -ylC httpd --sort:rss | awk '{sum+=$8; ++n} END {print "Tot="sum"("n")";print "Avg="sum"/"n"="sum/n/1024"MB"}' 

这会告诉你一个Apache进程的平均大小。

你的MaxClients可能太高了。

看看你的CPU中断,看看瓶颈开始(通过top ); 如前所述,最好拨下您的ServerLimit / MaxClients

根据你的消费情况,这可能(应该)加快速度,因为你减less了盒子饿死CPU的能力。