我正在运行一个流量密集的站点,其中包含大量动态内容,主要是用户生成的。
该服务器是专用服务器,共有 4 个 Intel(R) Xeon(R) 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% 的使用率,我一直在努力修复慢查询,但这是一个不同的问题。我知道这不是数据库瓶颈,因为静态页面在高峰时段也需要很长时间才能加载。
任何优化这些值的提示将不胜感激,谢谢。
您的 MaxClients 太高了。您的 apache 进程的当前大小是多少?乘以 x 900。是否大于 4GB?如果是这样,机器可能会进入交换状态。我通常从框中的 MaxClients = 2x vCPU 开始(grep -c 处理器 /proc/cpuinfo)。在这种情况下大约为 8。然后确保 MaxClients x apache 进程大小不超过 4GB。
您可以从那里升级您的 MaxClients,具体取决于您的客户所拥有的连接类型。(拨号用户需要被灌输,等等。)但要确保你永远不会让自己陷入交换的境地。
然后将 Min、Max 和 Start 服务器设置为 MaxClients。在专用服务器环境中没有必要让它们有所不同。
然后用 ab 做一些测试(如鹅的笔记。)
我建议使用 apache 的基准 (ab) 工具。您可以使用这些值将它们与您的流量相匹配,并查看您在平均加载时间等方面获得的响应类型。此时,您可以使用您正在谈论的设置来尝试优化它们。您应该能够使用 ab 来处理每个性能调整的最佳性能。
谈论您的设置对我来说并不谨慎,但是您还需要考虑您的 RAM,因为听起来您正在使用这些设置消耗大量 RAM。虽然这只是猜测,没有任何数据。htop 为您提供了对资源的良好视觉阅读。
您的平均负载也可以说很多。我怀疑您的使用量远高于 20-30% cpu 的内核总数,但它是服务器实际工作强度的另一个指标。
您需要获取 apache 进程的平均大小。使用此数字和 RAM 的总大小,您可以计算 MaxClients 指令。请记住这一点:“网络服务器永远不必交换”(Apache 性能调优)
使用 top 或 htop 进行监控是可以的,但您需要使用 ganglia 或 munin 等监控工具更好地查看服务器的所有统计信息(cpu、ram、磁盘 i/o、apache 请求、mysql 慢查询等)找出可能的瓶颈。