diff --git a/.env.dev b/.env.dev index 40774610bb72e98787d8ee831551c4a64148fda6..75ae332dcddf21b066ad48e321d35129813cef72 100644 --- a/.env.dev +++ b/.env.dev @@ -13,6 +13,7 @@ BROWSABLE_API_ENABLED=True FORWARDED_PROTO=http LDAP_ENABLED=False FUNKWHALE_SPA_HTML_ROOT=http://nginx/front/ +PYTHONTRACEMALLOC=1 # Uncomment this if you're using traefik/https # FORCE_HTTPS_URLS=True diff --git a/api/config/settings/local.py b/api/config/settings/local.py index b51ec273edac11ab8c1d63285016251de44429f2..2fc121612d47dd5a4da1abd747c65f0f8c175a8f 100644 --- a/api/config/settings/local.py +++ b/api/config/settings/local.py @@ -104,4 +104,5 @@ if env.bool("WEAK_PASSWORDS", default=False): MIDDLEWARE = ( "funkwhale_api.common.middleware.DevHttpsMiddleware", "funkwhale_api.common.middleware.ProfilerMiddleware", + "funkwhale_api.common.middleware.PymallocMiddleware", ) + MIDDLEWARE diff --git a/api/funkwhale_api/common/middleware.py b/api/funkwhale_api/common/middleware.py index 4752159106ca2de510f4c8b1ba0fcae32615a4ff..f7d2acda4ca95cfd601da81df17a66d592cf60dd 100644 --- a/api/funkwhale_api/common/middleware.py +++ b/api/funkwhale_api/common/middleware.py @@ -14,6 +14,7 @@ from django.middleware import csrf from django.contrib import auth from django import urls from rest_framework import views +import tracemalloc from funkwhale_api.federation import utils as federation_utils @@ -405,3 +406,20 @@ class ProfilerMiddleware: response = http.HttpResponse("<pre>%s</pre>" % stream.getvalue()) return response + + +class PymallocMiddleware: + def __init__(self, get_response): + self.get_response = get_response + + def __call__(self, request): + + if tracemalloc.is_tracing(): + snapshot = tracemalloc.take_snapshot() + stats = snapshot.statistics("lineno") + + print("Memory trace") + for stat in stats[:25]: + print(stat) + + return self.get_response(request)