Heroku偶尔请求缓慢

Bri*_*ong 19 performance heroku

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

这是一个请求的示例,通常需要大约150毫秒(20倍中的19个是需要多长时间).你可以看到,在这个请求上花了大约4秒,或者长了1到2个数量级.

在此输入图像描述

有些事情需要注意:

  • 数据库不是瓶颈,它只花了25ms进行数据库查询
  • 我们有足够的dynos,所以我不认为这是瓶颈(20个双dynos运行独角兽,每个5个工人,我们每分钟只能获得1000个请求,平均响应时间为150ms,这意味着我们应该能够服务(60/0.150)*20*5 =每分钟40,000个请求.换句话说,当进行此测量时,我们的dynos容量是40倍.

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

Nit*_*ked 9

我自己一直在追逐类似的问题,到目前为止运气不大.

我想第一项业务是推荐NewRelic.在这些情况下,它可能会为您提供更多信息.

其次,我建议您查看排队时间:您的请求排队多长时间.请查看NewRelic,或者使用Heroku添加到您的传入请求的"开始时间"HTTP标头(仅打印()减去"开始时间"作为您的队列时间)来自行完成.

当那些在我的情况下失败的时候,我试着想出可能出错的事情,这里有一个(非正统的?奇怪的?)列表:

1)DNS - 您在视图中进行任何DNS呼叫吗?这些可能需要一段时间.甚至DNS请求解析数据库主机名,Redis主机名,外部服务提供商等.

2)日志性能 - Heroku使用他们的"Logplex"收集你所有的标准输出,然后它会消耗到你自己定义的logdrains,Papertrail等服务.没有关于这个的性能的文档,并写入你的stdout从理论上讲,进程可能会阻塞Heroku冲洗它可能存在的任何缓冲区.

3)获得数据库连接 - 不确定您正在使用哪个框架,但是您可能有一个连接池,您正在从中获取数据库连接,这需要时间?它不会显示为查询时间,它会阻止您的进程时间.

4)Dyno性能 - Heroku有一个附加功能,可以每隔几秒将一些服务器指标(加载平均值,内存)打印到stdout.我使用Graphite来绘制这些图表并查找指标与我看到"偶发慢速请求"实例增加的时间之间的相关性.它没有帮助我,但可能会帮助你:)

请告诉我们您的想法.

  • 我们正在使用NewRelic.我们偶尔会看到尖刻的请求排队时间http://cl.ly/image/112t2x1F3I1s我不知道为什么因为我们应该超过dynos的容量(20 dynos,每个dyno 5个工人,双dynos,每个只有~1000个请求分钟).你的嫌疑人名单看起来不错.我觉得这个问题仍然存在于路由层中,但这只是猜测. (2认同)