如何调试Django网站的长等待时间

如何调试Django网站的长等待时间,django,performance,gunicorn,django-debug-toolbar,Django,Performance,Gunicorn,Django Debug Toolbar,我有一个Django网站,我想提高它的响应时间。当我在我的站点上单击站点内链接时,结果要么立即加载下一页,要么在加载页面之前等待20-30秒。我发现这种行为中没有可复制的模式来帮助我确定修复方法。我意识到这可能有很多原因,需要更多关于我的具体配置的信息才能在这方面获得具体帮助 但是,我希望其他人能够提供建议,说明我应该调查的一般领域,而不是倾翻配置信息页面并询问具体建议,这将与以下观察结果一致: 调试工具栏显示总CPU时间和SQL查询时间在合理范围内(

我有一个Django网站,我想提高它的响应时间。当我在我的站点上单击站点内链接时,结果要么立即加载下一页,要么在加载页面之前等待20-30秒。我发现这种行为中没有可复制的模式来帮助我确定修复方法。我意识到这可能有很多原因,需要更多关于我的具体配置的信息才能在这方面获得具体帮助

但是,我希望其他人能够提供建议,说明我应该调查的一般领域,而不是倾翻配置信息页面并询问具体建议,这将与以下观察结果一致:

调试工具栏显示总CPU时间和SQL查询时间在合理范围内(<1秒),但总浏览器请求时间为22秒(见图)。为什么这些值会如此不同?什么可以解释不属于CPU时间的几秒钟请求时间


更新1:在修改gunicorn中的--access日志文件标志后,我能够从Django中看到更详细的日志(如下所述:)。这向我表明,在发生延迟的情况下,Django在gunicorn worker重新启动之前(大约需要30秒)不会收到请求:

web_1 |[关键]工作线程超时 (pid:9)工人退出 (pid:9)启动 pid值为10的工人

现在我只需要找出为什么我的gunicorn员工出现故障



更新2:我向gunicorn添加了-w4标志(此标志以前未指定),问题似乎已消失。我会继续测试,看看这是否是一个长期的解决方案。

好的,下面是我找到的答案:

调试工具栏的CPU时间仅反映Django代码中所用的时间。总请求时间比CPU时间长得多的事实反映了其他服务器端非Django代码组合所花费的时间。因此,修复不在django中,而是在服务器设置的其余部分中。对于典型的django部署,通常怀疑的是django本身前面的一切(例如ngix、gunicorn等)


通过了解更多关于gunicorn标志(特别是访问日志文件)的信息,我可以看到gunicorn工作人员重复(但不是重复)超时时产生的错误消息。虽然仍然不知道超时发生的原因,但将1个工作进程更改为4个工作进程(使用-w 4标志)解决了最初的30秒页面加载延迟问题。

好的,下面是我找到的答案:

调试工具栏的CPU时间仅反映Django代码中所用的时间。总请求时间比CPU时间长得多的事实反映了其他服务器端非Django代码组合所花费的时间。因此,修复不在django中,而是在服务器设置的其余部分中。对于典型的django部署,通常怀疑的是django本身前面的一切(例如ngix、gunicorn等)

通过了解更多关于gunicorn标志(特别是访问日志文件)的信息,我可以看到gunicorn工作人员重复(但不是重复)超时时产生的错误消息。虽然仍然不知道发生超时的原因,但将一个worker更改为4个worker(使用-w4标志)解决了最初的30秒页面加载延迟问题