我正在用我的Django应用程序做负载测试,使用Django频道和一个redis频道层(django,graphene-django,channels,graphene-subscriptions,channels-redis)提供GraphQL订阅。作为ASGI服务器,我现在正在使用daphne。我使用nginx作为代理。后端通过GraphQL订阅发布消息的周期取决于后端通过MQTT接收消息的周期。我正在增加外部数据提供者向MQTT代理发布消息的周期,这意味着后端必须处理这些消息并通过GraphQL订阅发布消息的周期。我遇到了以下错误:
2020-03-11 08:33:58,464 ERROR 2 of 12 channels over capacity in group subscriptions看起来这个问题是由channels_redis引起的。我是否可以扩展基础架构来解决此问题?
发布于 2020-06-30 20:23:11
默认容量为100条,默认消息过期时间为60秒。因此,如果在这些容量/时间限制内从未读取通道,它将被填满。
通道可能被填满的原因之一是连接从未正确关闭。在这种情况下,通道将保留在组中,并最终填满。
缓解这种情况的一种方法是拥有足够的容量和较短的超时。您可以通过以下方式更改Django设置中的配置:
CHANNEL_LAYERS = {
"default": {
"BACKEND": "channels_redis.core.RedisChannelLayer",
"CONFIG": {
"hosts": REDIS_URL, # or where your redis server lives
"capacity": 1500, # default 100
"expiry": 10, # default 60
}
}
}https://stackoverflow.com/questions/60632227
复制相似问题