问题
2个apache
服务器的响应时间很长,但我没有看到CPU或内存的最大值。
详细信息
我有2个apache
服务器,为客户端提供静态内容。
- 这个网站流量很大
- 在高流量时,我每秒有大约10个请求(html、css、js、images)
- 每个HTML都向服务器发出30个其他请求,以加载js、css和图像
- Safari开发工具显示,每次我点击html页面时,其中2MB会被转移
- 这两台服务器在
Amazon Web Service
上运行 - 两个实例都是m1.large(2个CPU,7.5个RAM)
- 我在同一台服务器上提供图像
- 服务器在美国,但大量流量来自欧洲
我试过
- 从预备工变为工人
- 不断增加的进程
- 增加线程
- 增加超时
我正在使用ab
(apachebench)运行基准测试,但我没有看到改进。
我的问题是:
- 提供图像和像js(400k)这样的大资源可能会减慢服务器的速度吗
- 是否有可能每台服务器每秒5个请求的流量太大,而且我无法进行调整,所以唯一的解决方案是添加更多的服务器
amazon web services
的带宽有问题吗
新信息
我的文件正在从GlusterFS上的已安装目录中读取
在同一网络上的EC2实例上运行ab(apache bench)收集的度量
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的性能吗
感谢
提供大量静态资源可能会降低服务器的速度,这是绝对可能的(而且确实很可能)。您必须在下载这些内容的整个过程中打开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,以考虑请求峰值等,但至少这为您提供了一个很好的起点。
- 尝试启动/停止实例。这将使您转到另一个主机。如果您的实例所在的主机出现任何问题,这将减轻问题
- 除了检查系统负载数字之外,还可以查看内存使用情况、IO和CPU使用情况
- 查看您的系统日志,看看是否有任何东西产生了可以解释当前情况的错误
结账Eric J.在这个线程回答亚马逊EC2 Bitnami Wordpress极慢