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

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

我有一个 LAMP 服务器,有时每秒可以处理约 400 个请求,服务器配置如下:

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 预分叉配置:

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

在高峰时段,服务器负载非常高,CPU 利用率约为 90%,平均负载约为130

我不确定是服务器硬件限制还是我的 prefork 配置有问题 - 可能是什么问题?

答案1

您允许 Apache 生成最多 1500 个子进程来处理请求(ServerLimit/ MaxClients)——难怪您的服务器负载(在运行队列中等待的进程数量)会变得巨大!

对于您在问题中引用的每秒 400 个请求数,我的第一个建议是“将 MySQL 服务器移到它自己的盒子里”,或者更好的选择是:“添加另一个 Web 服务器并平衡您的请求”。
为了帮助您确定如何调整附加服务器的大小,请遵循 HDDP500 在其答案中给出的建议来计算 Apache 进程的平均大小。确定您想要在新服务器上运行多少个 Apache 进程,并确定处理它们需要多少 RAM。记得添加安全裕度(一到两个 GB)。

确定 CPU 需求(速度/核心数)稍微困难一些 - 你需要考虑服务器生成每个页面需要做多少“工作”。类似调试可以帮你解决这个问题,告诉你生成一个页面需要多长时间(你应该在未加载的服务器上以及加载的服务器上执行此测试,但你也应该不是大多数情况下在生产服务器上使用像 XDebug 这样的工具。)

答案2

您的 httpd 进程的平均大小是多少?

当服务器负载不足时运行此命令:

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

这将告诉您 Apache 进程的大致平均大小。

您的 MaxClients 可能太高了。

答案3

查看你的 CPU 中断并查看瓶颈从哪里开始(通过top);如前所述,调低你的ServerLimit/是个好主意MaxClients

根据您的消耗,这可能会(应该)加快速度,因为您减少了盒子自身 CPU 匮乏的能力。

相关内容