我有一个Rails应用,该应用已部署在Heroku免费dyno上。它使用MongoDB作为数据库,该数据库托管在Azure的实例上。该应用程序还使用Redis和Elasticsearch数据库,这些数据库也托管在Azure的实例上。我添加了附加组件:New Relic(用于应用程序性能监控)和Rollbar(用于错误报告)。
大多数时候,从Rails应用程序查询MongoDB都可以正常工作,并且响应时间非常正常。但是,一天几次,MongoDB似乎需要太多时间来响应。我附上了New Relic的屏幕截图,以便更好地理解。
但是,在这些时候,该应用程序无法运行,并且没有数据库查询可用。我在天蓝色监视中也看到了类似的模式。
我的第一个猜测是MongoDB服务器可能超载,并且无法响应。但是我可以直接从其他数据库客户端查询mongoDB,它正在正确发送数据。因此,mongoDB服务器未关闭。 我的第二个问题是heroku rails服务器可能关闭了。但是事实并非如此,因为我可以看到日志,并且服务器正在接收请求。 最后,我猜想某些查询可能比其他查询花费更多的时间,但运气不好。这些查询在大多数情况下都会执行,只会随机地引起问题,如所附的New Relic屏幕截图所示。
大约在同一时间,Rollbar还会引发以下错误:
Mongo::Error::SocketTimeoutError: Socket request timed out
非常感谢您指导如何诊断请求。