我们发现Heroku上的性能不一致与最近的独角兽/智能路由问题无关。
这是一个请求的示例,通常需要大约150毫秒(20倍中的19个是需要多长时间)。你可以看到,在这个请求上花了大约4秒,或者长了1到2个数量级。
有些注意事项:
所以我想知道什么可能导致这些偶尔的慢速请求。正如我所提到的,传闻似乎在20个请求中大约有1个发生。我唯一能想到的是盒子上存在嘈杂的邻居问题,或者路由层的性能不一致。如果有人有其他信息或想法,我会很好奇。谢谢。
答案 0 :(得分:9)
我自己一直在追逐类似的问题,到目前为止没有太多运气。
我认为第一项业务是推荐NewRelic。在这些情况下,它可能会为您提供更多信息。
其次,我建议您查看排队时间:您的请求排队多长时间。请查看NewRelic,或者使用Heroku添加到您的传入请求的“开始时间”HTTP标头(仅打印()减去“开始时间”作为您的队列时间)来自行完成。
如果那些人在我的情况下失败了,我试着提出可能出错的事情,这里有一个(非正统的?奇怪的?)清单:
1)DNS - 你在视图中进行任何DNS调用吗?这些可能需要一段时间。甚至DNS请求解析数据库主机名,Redis主机名,外部服务提供商等
2)日志性能 - Heroku使用他们的“Logplex”收集你的所有标准输出,然后它将消耗到你自己定义的logdrains,Papertrail等服务。没有关于这个的性能的文档,并写入从理论上讲,你的进程中的stdout可以阻塞Heroku冲刷它可能存在的任何缓冲区。
3)获取数据库连接 - 不确定您正在使用哪个框架,但是您可能有一个连接池,您正在从中获取数据库连接,这需要时间?它不会显示为查询时间,它会阻止您的流程。
4)Dyno性能 - Heroku具有一个附加功能,可以每隔几秒将一些服务器指标(加载平均值,内存)打印到stdout。我使用Graphite来绘制这些图表并查找指标与我看到“偶发慢速请求”实例增加的时间之间的相关性。它没有帮助我,但可能会帮助你:)。
请告诉我们您的想法。