Daphne 使用通道 2 和 Redis 层的 CPU 使用率高

Posted

技术标签:

【中文标题】Daphne 使用通道 2 和 Redis 层的 CPU 使用率高【英文标题】:Daphne High CPU Usage with Channel 2 and Redis Layer 【发布时间】:2018-07-18 10:41:59 【问题描述】:

我是一名 Django 开发人员,我最近使用 Channels 2 和 Redis 构建了一个消息传递应用程序。对于每个对话,我都会创建一个组,并在每次重新连接时将所有参与者添加到组中。

我还在 Daphne 的生产频道中使用工人

问题是,在为用户创建 10 个组后,消息传递变得非常缓慢,因为 daphne 使用了几乎 100 % 的 CPU 使用率,从而导致所有站点变慢。

我附上了 CPU 使用率的截图。

非常感谢您能建议减少 CPU 使用率

问候, 萨杜拉·纳伊姆

【问题讨论】:

请将额外信息作为编辑添加到问题中,而不是作为评论发布。 【参考方案1】:

就我而言,tasks.py(celery) 中的一些错误使 daphne cpu 的使用率达到 100%。

错误日志可以在asgi日志文件中查看。

【讨论】:

【参考方案2】:

我也有同样的问题。我看到 Uvicorn 和 Gunicorn 的表现最好。

gunicorn -b 0.0.0.0 -p 8000 mysite.asgi:application -k uvicorn.workers.UvicornWorker --workers 4

在这种情况下,我预计 4 个工作人员,它使用服务器的 4 个核心,并分配 CPU 的使用。

【讨论】:

以上是关于Daphne 使用通道 2 和 Redis 层的 CPU 使用率高的主要内容,如果未能解决你的问题,请参考以下文章

使用 SSL 使用 Daphne + NGINX 部署 Django 通道

使用 nginx 和 daphne 部署 django、channels 和 websockets

Django 频道 daphne 返回 200 状态码

WebSocket wss:// 在 SSL 上与 Nginx Gunicorn Daphne Channels Redis

在带有协议升级的 nginx 反向代理后面运行 daphne 总是路由到 http 而不是 websocket

django 3和django通道中的SynchronousOnlyOperation错误