【发布时间】: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 共享”以及他们用来实现这一目标的虚拟化有关。为了证明我的观点,你可以编写一小段代码,比如
/testurl 的处理程序。在其中,数到数百万。只烧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