Apache响应速度太慢,但CPU和内存不会最大化

时间:2012-11-30 18:12:42

标签: amazon-web-services apache

问题

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

详情

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

  • 这个网站有很多流量。
  • 在高流量时我每秒有~10个请求(html,css,js,images)。
  • 每个HTML都向服务器发出30个其他请求,用于加载js,css和images。
  • 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,images)是否有可能显着降低的性能? Apache的性能?

由于

2 个答案:

答案 0 :(得分:3)

提供大型静态资源绝对可能(实际上可能)可能会降低服务器速度。您必须在下载每个内容的整个时间打开Apache工作线程。文件越大,下载时间越长,线程打开的时间越长。在达到为Apache设置的任何内存限制之前,您可能达到了最大线程限制。

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

减少超过一个数量级的服务请求数量肯定有助于服务器性能,并且可能允许您减少到单个服务器(或者如果您仍然需要多个服务器 - 这是一个好主意)可能会减少服务器的大小。

有一件事你会发现,基本上所有高容量网站都有一个共同点,那就是他们将静态内容提供给CDN。一旦你成为一个高容量网站,你必须绝对考虑这个(或者至少使用Nginx,Lighty或其他一些比Apache更适合提供静态内容的Web服务器来提供来自不同服务器的静态内容)。 / p>

卸载静态流量后,您可以真正开始担心调整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的最大线程来解决请求高峰等问题,但至少这为你提供了一个好的起点。

答案 1 :(得分:0)

  1. 尝试启动/停止实例。这会将您转移到其他主机。如果您的实例所在的主机出现任何问题,那么可以缓解它。
  2. 除了检查系统负载数量外,还要查看内存使用情况,IO和CPU使用情况。
  3. 查看系统日志,看看是否有任何错误可以解释当前情况。
  4. 结账Eric J.在这个主题中回答Amazon EC2 Bitnami Wordpress Extremely Slow