Skip to content
Snippets Groups Projects
Commit 94662e58 authored by Georg Krause's avatar Georg Krause
Browse files

Merge branch 'tracemallocmiddleware' into 'develop'

Initial tracemalloc middleware,

See merge request funkwhale/funkwhale!1293
parents 6d42c833 bbeecb52
No related branches found
No related tags found
No related merge requests found
......@@ -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
......
......@@ -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
......@@ -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)
Debugging Funkwhale
===================
In order to track down errors its useful to provide as many information as possible. Usually pasting
the logs should be sufficient, but there are some tools for some deeper debugging.
Frontend Logs
-------------
Logs and errors written by the Frontend can be accessed with Firefox. When opening the website of
your Funkwhale instance, simply hit ``Ctlr + Shift + J``. Alternatively open the Firefox Menu and open
the Browser Console in the developers menu.
In the opening window you can see all the output. You can copy what you want to share or repeat the
failing operation to see what error occurs.
Backend Logs
------------
Depending on your setup you can see the logs from our API server in different ways.
Docker
^^^^^^
Simply run ``docker-compose logs --tail=100 api`` If you want continuous logs, add the ``f`` flag.
Quick install
^^^^^^^^^^^^^
To get the logs, run ``journalctl -xn -u funkwhale-server``
Profiling
---------
In order to find performance issues, its possible to run API requests with activated profiling. In
order to do this, add ``funkwhale_api.common.middleware.ProfilerMiddleware`` to the environment
variable ``ADDITIONAL_MIDDLEWARES_BEFORE``
If enabled, simply add ``?prof`` to the request URL you want to profile. You should get an HTML-Report
of the running request.
Memory Tracing
--------------
Its possible to print memory traces for each API request to the API logs. In order to do this, add
``funkwhale_api.common.middleware.PymallocMiddleware`` to the environment variable
``ADDITIONAL_MODDLEWARES_BEFORE`` This adds a middleware which should not do anything by default.
Tracing can be activated by setting ``PYTHONTRACEMALLOC=1`` This might has some inpact on the
performance, please report how it goes. The Middleware now prints the top 25 memory allocations to
the API logs.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment