代码之家  ›  专栏  ›  技术社区  ›  Matthew Savage

乘客托管的Rails应用程序速度很慢,但服务器是个野兽

  •  26
  • Matthew Savage  · 技术社区  · 15 年前

    我一直在部署一个相对较大的Rails应用程序(Rails 2.3.5),最近做了一些负载测试,我们发现站点的吞吐量远远低于预期的流量水平。

    我们在一个32位的标准服务器上运行,3GB的RAM和CentOS,我们运行的是Ruby Enterprise Edition(最新版本)、Passenger(最新版本)和Nginx(最新版本)-当只有一个或两个用户时,该站点运行良好(如您所料),但是当我们尝试将负载增加到大约50个并发请求时,它会完全停止运行。(Apache工作台报告~2.3 req/sec,即 可怕的 )

    我们正在运行RPM并试图确定负载问题在哪里,但是它在Rails、SQL和memcached中分布得相当均匀,所以我们或多或少地要研究并优化代码库。

    出于绝望,我们创建了一个大型EC2实例(Ubuntu 9.10、7.5GB RAM、2个计算单元/核心),并设置了与原始服务器相同的配置,虽然有更多的资源,但我们仍然看到了可悲的结果。

    因此,在花了太多时间尝试优化、玩缓存配置等之后,我决定测试一些Mongrel和Ta-da的吞吐量,它们的性能比乘客好得多。

    目前配置是通过nginx代理15x mongrels,我们似乎满足了我们的负载需求。 只是 但这还不足以让我适应生活…我想知道的是,是否有人知道造成这种情况的一些可能原因…?

    我的乘客/nginx配置是:

    • nginx工人:在1到10之间尝试,通常是3个。
    • 最大载客量:10-30人(是的,这个数字很高)
    • 乘客全球排队:试过开和关。
    • nginx gzip打开:是

    值得注意的是,我们将nginx最大客户机主体大小增加到了200米,以允许大文件上载。

    不管怎样,建议是 真正地 感谢你,虽然这些小玩意工作得很好,但它改变了我们做事的方式,我真的更喜欢坐乘客——而且,它不应该让事情变得更简单,表现更好吗?

    2 回复  |  直到 14 年前
        1
  •  17
  •   hurikhan77    15 年前

    也许你的SQL池太小了?这从本质上限制了应用程序中数据库工作负载的并行性,一旦将工作放到应用程序堆栈上,数据库工作负载就会增加很多…

        2
  •  2
  •   John Topley    15 年前

    作为第一步,我将在您的环境中部署一个最小的“hello world”类型的rails应用程序,并查看使用它可以获得什么吞吐量。这样做至少可以告诉您您的问题是环境问题还是应用程序中的某个地方。

    推荐文章