我在Heroku上有一台服务器 - 3个dynos,每个2个进程。
服务器完成两件事:
当我查看新遗物时,我看到下面的图表,这表明即使我将其他服务器最多保留在一个并行请求中,它仍然会加载我的服务器,从而创建峰值。
我希望由于来自其他服务器的调用率有限,我的服务器不会过载,因为请求只会在前一个请求结束时启动(我猜测可能数据库过载了它获得更新请求并返回但在此之后继续处理。
有什么可以解释这种行为?
为了了解发生了什么,我还能在哪里查看?
有没有办法避免这种行为?
答案 0 :(得分:1)
这项调查可能有很多方向,但是从你的截图和一些推论中,我有两个猜测。
heroku pg:long-running-queries
和heroku pg:seq-scans
。前者显示可能需要优化的查询,后者显示可以使用不同查询或更好的索引修复的全表扫描。您可以在NewRelic的数据库选项卡中找到类似的信息,该选项卡具有时间和吞吐量图表,您可以尝试再次匹配您的排队峰值。最后,查看NewRelic的“交易”选项卡。
pg:long-running-queries
相关联。看看你的dyno和数据库内存使用情况。两者都打印到Heroku logs,如果添加Librato,它们会构建一些非常有用的自动图表。如果您的dyno正在交换,性能将受到影响,您应该升级到更大的dyno或每个dyno运行更少的进程。进程通常会在内存运行时累积内存,并且永远不会释放尽可能多的内存,因此调整它以便在重新启动之前,您的dyno正好位于其可用RAM之下。类似地,对于数据库,如果您在那里进行交换,查询性能将受到影响,您应该进行升级。
其他可能的事情,但可能不是这种情况: