18

我的技术栈是 Redis 作为通道后端,Postgresql 作为数据库,Daphne 作为 ASGI 服务器,Nginx 在整个应用程序的前面。一切都使用 Docker Swarm 部署,外部只有 Redis 和数据库。我有大约 20 个虚拟主机,20 个接口服务器,40 个 http worker 和 20 个 websocket worker。负载平衡是使用 Ingress 覆盖 Docker 网络完成的。

问题是,有时在性能方面会发生非常奇怪的事情。大多数请求在 400 毫秒内处理,但有时请求可能需要 2-3 秒,即使在非常小的负载下也是如此。使用 Django 调试工具栏或基于中间件的分析器分析工作人员没有显示任何内容(时间 0.01 秒左右)

我的问题:有没有什么好的方法可以用 django-channels 分析整个请求路径?我想知道每个阶段需要多少时间,即 Daphne 何时处理请求、何时工作人员开始处理、何时完成、何时接口服务器向客户端发送响应。目前,我不知道如何解决这个问题。

4

2 回答 2

1

Django-silk 可能有助于您分析请求和数据库搜索时间,原因如下:

  1. settings.py只需在Django 项目中添加配置即可轻松设置。
  2. 可定制:通过使用提供的装饰器,您可以分析函数或方法并获取它们的运行性能。
  3. 动态设置:您可以选择为方法动态分配丝绸,还可以在运行期间设置您想要的分析速率。

正如文档所述:

Silk 是 Django 框架的实时分析和检查工具。Silk 拦截并存储 HTTP 请求和数据库查询,然后将它们呈现在用户界面中以供进一步检查

注意: Silk 可能会使您的数据库搜索时间增加一倍,因此如果您在生产环境中设置它可能会造成一些麻烦。但是,丝绸的增加将单独显示在仪表板上。

https://github.com/jazzband/django-silk

于 2018-10-17T13:58:42.563 回答
0

为什么不使用 Kibana 或 New Relic 之类的监控工具,并监控小型有效负载响应的原因和原因。它可以告诉你在 Python、PostgreSQL 和 Memcache (Redis) 上花费的时间。

于 2017-10-16T14:49:03.403 回答