Django/channel_redis 缓慢的内存泄漏

问题描述

我为 channel_redis 和我的 views.py 尝试了各种配置。使用 tracememalloc 我发现垃圾收集没有遗漏任何东西。我在websocket连接函数中使用了tracememalloc。

我是否为连接设置了超时,内存是否仍在增长。我也使用 django_prometheus。

目前这里是我的 Asgi.py

os.environ.setdefault("DJANGO_SETTINGS_MODULE","panoptes.settings")
django.setup()
application = get_default_application()

这是我的 redis 设置。

CHANNEL_LAYERS = {
    "default": {
        # Use InMemoryChannelLayer for testing only
        # "BACKEND": "channels.layers.InMemoryChannelLayer"
        "BACKEND": "channels_redis.core.RedisChannelLayer","CONfig": {
            "hosts": [("redis",6379)],"capacity": 1500,"expiry": 60,"group_expiry": 42300,},}
}

相关的views.py

class NewAlert(View):
    def post(self,request):
        raw = request.body.decode("utf-8")
        data = json.loads(raw)
        for new_alert in data.get("alerts"):
            status = new_alert.get("status")
            new_alert["status"] = {
                "state": status,}
            create_or_update_alert(new_alert).save()
            gc.collect()
        return HttpResponse()

urls.py

urlpatterns = [
    path("graphql/",csrf_exempt(GraphQLView.as_view(graphiql=True)),name="graphql"),path("alert/webhook/",csrf_exempt(views.NewAlert.as_view())),path("check",csrf_exempt(views.check_login),name="check_login"),path(
        "favicon.ico",RedirectView.as_view(url=staticfiles_storage.url("panoptes.ico"))
    ),path("",views.index,name="index"),path("post_login",csrf_exempt(views.post_login),name="post_login"),path("post_logout",csrf_exempt(views.post_logout),name="post_logout"),]

我使用 react.js 作为前端。 Tracememalloc 只发现 "" 作为最大的块。 https://docs.python.org/3/library/tracemalloc.html#get-the-traceback-of-a-memory-block

我构建了该项目的一部分,但我从一位从未解决过问题的前同事那里接手了 websocket。

这是一个非常缓慢的增长。我们从来没有超过 10 个连接,而且很少。

我的轮班休息 4 天。当我离开时,内存约为 75Mb,当我回来时,内存约为 160Mb。

我有两个 cron 作业正在运行,但我已经尝试将它们删除 100 次,在它们完成后,内存会恢复到之前的状态。

当我回来时,增长仍在继续,但我通常会推送更改以尝试解决并重新启动它所在的容器。

尝试再次运行 tacememalloc 后

2021-02-05 16:13:00,852 INFO     /usr/local/lib/python3.9/site-packages/channels_redis/core.py:0: size=2013 KiB (+2013 KiB),count=13809 (+13809),average=149 B
2021-02-05 16:13:00,852 INFO     /usr/local/lib/python3.9/asyncio/queues.py:0: size=646 KiB (+646 KiB),count=2120 (+2120),average=312 B
2021-02-05 16:13:00,852 INFO     /usr/local/lib/python3.9/threading.py:0: size=549 KiB (+549 KiB),count=2846 (+2846),average=198 B
2021-02-05 16:13:00,853 INFO     /usr/local/lib/python3.9/site-packages/daphne/ws_protocol.py:0: size=463 KiB (+463 KiB),count=3943 (+3943),average=120 B

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)