【发布时间】:2015-09-14 02:20:24
【问题描述】:
我们看到 Heroku 上的 Rails 应用程序在负载下出现问题,尽管 CPU 利用率远低于 100% 且内存使用率在 dynos 的能力范围内,但请求队列(据 New Relic 报告)急剧上升。
此时我认为寻找问题的地方是资源争用(例如数据库连接)和阻止等待来自外部服务的响应。
我正在寻求有关如何解决问题的帮助。除了我提到的两件事之外,您还会寻找什么?你会使用什么工具来获取数据并理解它?
感谢您的任何建议。
【问题讨论】:
-
您收到什么样的活动(并发用户)?日志文件中有错误吗?
-
例如在今天早些时候的负载测试中,以 600 rpm 运行 10 分钟(每 10 秒有 100 个用户发出请求),cpu 使用率仅达到 52%,而每个请求的请求队列达到 3260 毫秒每个请求总共需要 4000 毫秒,包括中间件、Ruby 和 pg。 105 个回复得到 503s。除此之外,日志中没有错误。
-
这听起来很模糊,但可以是任意数量的东西。您可能知道,503 可能来自糟糕的服务器规格、太多的并发连接、长时间运行的任务……但这些都是一些开始的地方。您没有指定您的服务器平台,但是(假设没有与代码相关的问题)您可能希望开始搜索特定于操作系统的问题。
-
数据库连接(池太小,请求会阻塞)、长时间运行的查询、会话存储(即 Redis 池太小)等。您的应用程序与其他服务联系的任何地方通常都会阻塞随着请求的增加。您应该注意您正在使用的测功机尺寸和数据库计划。
-
谢谢大家。这个应用程序在 puma 单线程上运行,在一个 2x dyno 上有 12 名工作人员(所以我们不能责怪 Heroku 路由器),并有一个 15 个连接到 hobby-dev postgres dyno 的池。我们要去 Standard0,所以这可能会有所帮助。
标签: ruby-on-rails performance heroku