3

问题

2apache台服务器的响应时间很长,但我没有看到 CPU 或内存达到最大值。

细节

我有 2 apache台服务器为客户端提供静态内容。

  • 这个网站有很多流量。
  • 在高流量时,我每秒有大约 10 个请求(html、css、js、图像)。
  • 每个 HTML 向服务器发出 30 个其他请求以加载 js、css 和图像。
  • Safari 开发者工具显示,每次我点击一个 html 页面时,都会传输 2MB
  • 这两个服务器正在运行Amazon Web Service
  • 两个实例都是 m1.large (2 CPUS, 7.5 RAM)
  • 我在同一台服务器上提供图像
  • 服务器在美国,但很多流量来自欧洲

我试过了

  • 从 prefork 变为 worker
  • 增加进程
  • 增加线程
  • 增加超时

我正在使用ab(apachebench) 运行基准测试,但没有看到任何改进。

我的问题是:

  • 提供图像和像js(400k)这样的大型资源是否可能会减慢服务器的速度?
  • 是否有可能每台服务器每秒 5 个请求只是过多的流量并且我无法进行调整,所以唯一的解决方案是添加更多服务器?
  • amazon web services带宽有问题吗?

新信息

正在从 GlusterFS 上的挂载目录中读取我的文件

使用 ab (apache bench) 收集的指标在同一网络上的 EC2 实例上运行

Connections: 500
Concurrency: 200

Server with files on mounted directory (files on glusterfs)
    Request per second: 25.26
    Time per request: 38.954
    Transfer rate: 546.02

Server without files on mounted directory (files on local storage)
    Request per second: 1282.62
    Time per request: 0.780
    Transfer rate: 27104.40

新问题

从挂载目录(NFS 或 GlusterFS)读取资源(htmls、js、css、图像)是否可能会显着降低 Apache 的性能?

谢谢

4

2 回答 2

3

提供大型静态资源绝对有可能(并且确实很可能)会降低您的服务器速度。在下载这些内容中的每一个的整个过程中,您都必须打开 Apache 工作线程。文件越大,下载的时间越长,您需要保持线程打开的时间越长。在达到为 Apache 设置的任何类型的内存限制之前,您可能已经达到最大线程限制。

首先,我建议将您的所有静态内容从您的服务器上移到 Cloudfront 或类似的 CDN 中。这将使您的 Web 服务器只需要担心主要的 Web 请求。这可能会使每秒请求数(以及相关的打开 Apache 线程数)从 10 个请求/秒降低到 0.3 个请求/秒(基于主要请求与次要内容请求的 30:1 比率)。

将您服务的请求数量减少一个数量级以上肯定会提高服务器性能,并且可能允许您减少到单个服务器(或者如果您仍然需要多个服务器 - 这是一个好主意)可能会减少你的服务器。

您会发现基本上所有大容量网站的一个共同点是,它们将提供静态内容的业务留给了 CDN。一旦你达到了成为一个大容量站点的地步,你必须绝对考虑这一点(或者至少使用 Nginx、Lighty 或其他一些比 Apache 更适合提供静态内容的 Web 服务器提供来自不同服务器的静态内容)。

卸载静态流量后,您可以真正开始考虑调整 Web 服务器以处理主要请求。当你达到这一点时,你需要知道一些事情:

  • 单个请求线程的平均内存使用量
  • 您分配给 Apache 的内存量(如果这是专用的 Apache 服务器,可能是整个实例内存的 70-80%)
  • 应用程序响应请求的平均时间

基于此,这是一个非常简单的公式,可以作为调整最大线程设置的良好起点。

假设您有以下内容:

Apache memory: 4000KB
Avg. thread memory: 20KB
Avg. time per request: 0.5 s

这意味着您的配置可以按如下方式处理请求吞吐量:

100 requests/second = 4000kb / (20kb * 0.5 seconds/request )

由于每个请求平均为 0.5 秒,您可以假设您需要 50 个线程来处理此吞吐量。

显然,您可能希望将最大线程数设置为高于 50 以解决请求峰值等问题,但至少这为您提供了一个很好的起点。

于 2012-11-30T23:33:09.997 回答
0
  1. 尝试启动/停止实例。这会将您转移到其他主机。如果您的实例所在的主机有任何问题,那将减轻它。
  2. 除了检查系统负载数之外,还要查看内存使用情况、IO 和 CPU 使用情况。
  3. 查看您的系统日志,看看是否有任何东西产生了可以解释当前情况的错误。

结帐 Eric J. 在此线程中回答Amazon EC2 Bitnami Wordpress 极慢

于 2012-11-30T20:19:09.360 回答