我的技术堆栈是Redis作为通道后端,Postgresql作为数据库,Daphne作为ASGI服务器,Nginx作为整个应用程序。使用Docker Swarm部署所有内容,只有Redis和数据库外部。我有大约20个虚拟主机,20个接口服务器,40个http工作者和20个websocket工作者。使用Ingress覆盖Docker网络完成负载平衡。
问题是,有时在性能上会发生非常奇怪的事情。大多数请求的处理时间不到400毫秒,但有时请求可能需要2-3秒,即使在非常小的负载下也是如此。使用Django调试工具栏或基于中间件的分析器的分析工作程序什么都不显示(时间0.01s左右)
我的问题:是否有任何使用django-channels分析整个请求路径的好方法?我希望每个阶段花费多少时间,即当Daphne处理请求时,当工作人员开始处理时,当它完成时,当接口服务器向客户端发送响应时。目前,我不知道如何解决这个问题。
答案 0 :(得分:0)
为什么不坚持像Kibana或New Relic这样的监控工具,并监控为什么以及为了实现小负载响应所花费的时间。它可以告诉你花在Python,PostgreSQL和Memcache(Redis)上的时间。
答案 1 :(得分:0)
Django-silk可能对您有帮助,因为以下原因可以帮助您分析请求和数据库搜索时间:
settings.py
上添加配置即可轻松进行设置。 文档说明:
Silk是Django框架的实时分析和检查工具。 Silk会先拦截并存储HTTP请求和数据库查询,然后再将它们显示在用户界面中以供进一步检查
注意:Silk可能会使数据库搜索时间加倍,因此,如果在生产环境中进行设置,可能会造成一些麻烦。但是,来自丝线的增加将在仪表板上单独显示。