【问题标题】:Occasional slow requests on HerokuHeroku 上偶尔的缓慢请求
【发布时间】:2013-04-14 00:23:26
【问题描述】:

我们发现 Heroku 的性能不一致,这与最近的独角兽/智能路由问题无关。

这是一个请求示例,通常需要大约 150 毫秒(20 次中有 19 次是需要多长时间)。您可以看到,在这个请求中,它花费了大约 4 秒,或者长了 1 到 2 个数量级。

注意事项:

  • 数据库不是瓶颈,数据库查询只用了 25 毫秒
  • 我们有足够多的 dyno,所以我认为这不是瓶颈(20 个双 dyno 运行 unicorn,每个 5 个工作人员,我们每分钟只收到 1000 个请求,平均响应时间为 150 毫秒,这意味着我们应该能够处理 (60 / 0.150) * 20 * 5 = 每分钟 40,000 个请求。换句话说,在进行此测量时,我们的 dynos 容量是 40 倍。

所以我想知道是什么导致了这些偶尔的缓慢请求。正如我所提到的,有趣的是,它似乎发生在大约 20 个请求中的 1 个。我唯一能想到的就是盒子上存在嘈杂的邻居问题,或者路由层的性能不一致。如果有人有其他信息或想法,我会很好奇。谢谢。

【问题讨论】:

  • 如果有什么安慰的话,我也遇到了这种情况,并且无法找到特定于应用程序的原因。噪声邻居理论的另一个数据点?
  • 您是否尝试过 Heroku 的支持票?
  • 一段时间后重新审视这个问题,这是一个疯狂理论:这与 Heroku 的“公平 CPU 共享”以及他们用来实现这一目标的虚拟化有关。为了证明我的观点,你可以编写一小段代码,比如/test url 的处理程序。在其中,数到数百万。只烧CPU。 最终需要 150 毫秒和 4 秒,然后是 Heroku。
  • 我知道我参加聚会有点晚了,但我最近在 heroku 上运行 Puma 时看到了类似的问题。即使对于返回未修改的简单 304 的方法,峰值也可能发生高达 1000 毫秒。 New Relic 报告路由中或应用程序与数据库之一 SQL 或 NOSQL 之间没有延迟峰值。 GC 似乎也没有飙升。它只是控制器动作中的一个巨大峰值......还有其他人能解决这个问题还是这只是一个 Heroku 问题?
  • 根据这个关于类似问题的答案,heroku 承认这可能发生,因为在共享测功机类型(即 1x 和 2x)之间如何处理内存的 heroku 问题。 stackoverflow.com/a/32465651/1436131。我们的问题似乎与我今天在日志中看到的相同。

标签: performance heroku


【解决方案1】:

我自己也一直在追求类似的问题,到目前为止运气不佳。

我想首要任务是推荐 NewRelic。它可能会为您提供有关这些案例的更多信息。

其次,我建议您查看排队时间:您的请求排队了多长时间。查看 NewRelic,或者使用 Heroku 添加到传入请求中的“开始时间”HTTP 标头自己做(只需打印 now() 减去“开始时间”作为队列时间)。

当我的情况失败时,我尝试提出可能出错的事情,这里有一个(非正统的?奇怪的?)列表:

1) DNS -- 您是否在您的视野中进行任何 DNS 调用?这些可能需要一段时间。甚至是解析 DB 主机名、Redis 主机名、外部服务提供者等的 DNS 请求。

2) 日志性能——Heroku 使用他们的“Logplex”收集你所有的标准输出,然后将其排入你自己定义的日志排水、Papertrail 等服务等。没有关于此性能的文档,并写入理论上,您的进程中的 stdout 可能会阻塞一段时间,而 Heroku 正在刷新它可能存在的任何缓冲区。

3) 获取数据库连接——不确定您使用的是哪个框架,但也许您有一个连接池,您从中获取数据库连接,这需要时间?它不会显示为查询时间,它将成为您进程的阻塞时间。

4) Dyno 性能——Heroku 有一个附加功能,可以每隔几秒打印一些服务器指标(平均负载、内存)到标准输出。我使用 Graphite 来绘制这些图表,并寻找指标和时间之间的相关性,我看到“零星缓慢请求”的实例增加。它没有帮助我,但可能会帮助你:)

请告诉我们您的想法。

【讨论】:

  • 我们正在使用 NewRelic。我们偶尔仍然会看到尖峰请求排队时间cl.ly/image/112t2x1F3I1s 我不知道为什么,因为我们应该在 dynos 上超出容量(20 dynos,每个 dyno 5 个工人,双 dynos,每分钟只有约 1000 个请求)。你的嫌疑人名单看起来不错。我觉得问题仍然在路由层,但这只是一个猜测。
  • @Brian - 出于好奇,为什么你有 20GB 的应用程序服务器来处理 1000 个请求/分钟?这只有 16-17 个请求/秒。您有时会获得 10 倍的流量高峰吗? (编辑:没关系,我刚刚意识到你在运行 coinbase ......棒极了,但很容易看出规模的来源!)另外,你有没有弄清楚请求缓慢的原因?我有同样的问题(大约每 3 个对基本视图(无 DB 访问)的请求中就有 1 个非常慢),这让我抓狂。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-29
  • 1970-01-01
  • 2018-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-10
相关资源
最近更新 更多