gpt4 book ai didi

amazon-web-services - Apache 响应缓慢,但 CPU 和内存未达到最大值

转载 作者:行者123 更新时间:2023-12-04 04:08:00 26 4
gpt4 key购买 nike

问题

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

详情

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

  • 这个网站有很多流量。
  • 在高流量下,我每秒有大约 10 个请求(html、css、js、图像)。
  • 每个 HTML 向服务器发出 30 个其他请求以加载 js、css 和图像。
  • Safari 开发者工具显示,每次我点击一个 html 页面时,其中的 2MB 正在传输
  • 这两个服务器运行在 Amazon Web Service
  • 两个实例都是 m1.large(2 个 CPU,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 的性能?

    谢谢

    最佳答案

    提供大量静态资源绝对有可能(并且确实可能​​)会降低您的服务器的速度。您必须让 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 以解决请求峰值等问题,但至少这为您提供了一个良好的起点。

    关于amazon-web-services - Apache 响应缓慢,但 CPU 和内存未达到最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13650790/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com