Merge branch 'tracemallocmiddleware' into 'develop'
Initial tracemalloc middleware, See merge request funkwhale/funkwhale!1293
This commit is contained in:
commit
94662e5814
1
.env.dev
1
.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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -0,0 +1,50 @@
|
|||
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.
|
Loading…
Reference in New Issue