我的 Apache 服务器的瓶颈是什么?

我的 Apache 服务器的瓶颈是什么?
$netstat -anp | grep :80 | grep TIME_WAIT | wc -l  
840 
$netstat -anp |grep :80 | grep ESTABLISHED | wc -l 
50

内存使用量:850MB / 1000MB

apache2.conf 包含..

<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>

<IfModule mpm_worker_module>
    StartServers          2
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadLimit          64
    ThreadsPerChild      25
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>

<IfModule mpm_event_module>
    StartServers          2
    MaxClients          150
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadLimit          64
    ThreadsPerChild      25
    MaxRequestsPerChild   0
</IfModule>

是否有任何配置更改可以帮助我,或者只是我的 RAM 是这里的瓶颈?
需要紧急帮助..!!

答案1

如果没有有关您的服务器、配置和应用程序的更多信息,很难给出详细的答案,但这里有一些需要考虑的一般事项:

  • 150 MaxClients 和 1GB RAM 可能太多了,尤其是对于运行 PHP 的 Apache 服务器。可能发生的情况是,Apache 将用尽所有 RAM 并开始占用交换内存,这会立即降低您的性能。检查这一点的最佳方法是在高峰时段检查“top”和“free”的输出,并确保交换内存使用率接近 0。如果您的可用内存变为零,并且交换内存开始增加,请尝试减少 MaxClients。棘手的部分是,服务器似乎在较高的 MaxClients 设置下运行良好,直到您碰巧遇到开始使用交换的流量高峰。
  • 您可以通过禁用任何不使用的模块来减少 Apache 使用的内存量。尝试一次禁用几个模块并进行测试,以确保您不会意外禁用所需的模块(根据经验)。
  • TIME_WAIT 中有很多连接是正常的。这是套接字完成并等待关闭/销毁后出现的状态。ESTABLISHED 中有很多连接可能是由于服务器负载过高、提供文件需要一段时间或 KeepAlive 设置过大(尽管我不确定后者保持什么状态的连接)。对于我的应用程序,我发现 KeepAlive 设置实际上损害了性能,所以我禁用了它。默认的 KeepAlive 设置(我认为是 15 秒)对于大多数应用程序来说实际上相当大,有时 1 或 2 秒的值效果更好。
  • 下一个最有可能的瓶颈是 CPU。使用“uptime”或“top”检查服务器的负载。通常,负载小于 1 是好的,大约 1 是可以的,并且随着值的增加,它表明存在更大的潜在问题。没有“坏”的负载值(至少在您获得非常高的值之前):通常我看到我的服务器在运行良好时负载小于 0.5,偶尔会达到 5。检查“top”中的 CPU 空闲率是衡量 CPU 繁忙程度的另一个指标。
  • 如果您的 CPU 是瓶颈,请考虑安装 PHP 操作码缓存,如 eAccelerator 或 APC。这可以立即将您的 CPU 使用率降低一半(左右)。其他需要考虑的事情是添加缓存层以减少 Web 服务器必须处理的请求量,并使用轻量级服务器(如 lighttpd/nginx)来提供静态内容。
  • 您可以使用 ab 或 siege 等基准测试程序更准确地测试瓶颈(硬件或配置)。使用当前配置进行一些基线测量,更改设置,然后重试。如果您不测量配置更改的影响,您最终可能会花费大量时间来更改错误的内容。

相关内容