我的用户在 Heroku 上看到偶尔的请求超时。不幸的是,我无法始终如一地重现它们,这使得它们很难调试。有很多机会可以提高性能——例如,通过减少每个请求的大量数据库查询和添加更多缓存——但如果不进行分析,那是在黑暗中的一击。
根据我们的 New Relic 分析,服务器上的许多请求需要 1 到 5 秒。我知道这太慢了,但它远不及超时所需的 30 秒。
New Relic 上的错误选项卡向我显示了发生超时的几个不同的数据库查询,但这些查询并不是特别慢的查询,并且每次崩溃可能是不同的查询。同样对于相同的 URL,它有时会显示,有时不会显示数据库查询。
我如何找出在这些特殊情况下发生了什么?例如,我如何查看发生超时时它在数据库中花费了多少时间,而不是在没有错误时它在数据库中花费的时间?
我的一个假设是数据库在某些情况下被锁定。也许是阅读和写作的结合。