Wie profiliere ich django-Kanäle?

8

Mein Technologie-Stack ist Redis als Kanal-Backend, Postgresql als Datenbank, Daphne als ASGI-Server, Nginx vor einer ganzen Anwendung. Alles wird mithilfe von Docker Swarm bereitgestellt, wobei nur Redis und Database außen liegen. Ich habe ungefähr 20 virtuelle Hosts mit 20 Schnittstellenservern, 40 http-Mitarbeitern und 20 Websocket-Mitarbeitern. Load Balancing erfolgt mithilfe von Ingress-Overlay-Docker-Netzwerk.

Das Problem ist, dass manchmal sehr komische Dinge hinsichtlich der Leistung passieren. Die meisten Anfragen werden in weniger als 400 ms bearbeitet, aber manchmal kann die Anfrage bis zu 2-3 s dauern, selbst bei sehr geringer Belastung. Das Profiling von Arbeitern mit Django Debug Toolbar oder Middleware-basierten Profilern zeigt nichts (Timing 0,01s oder so)

Meine Frage: Gibt es eine gute Methode, einen gesamten Anfragepfad mit django-Kanälen zu profilieren? Ich würde gerne, wie viel Zeit jede Phase dauert, d. H. Wenn Anfrage von Daphne verarbeitet wurde, wenn der Arbeiter die Verarbeitung begann, wenn es fertig war, wenn der Schnittstellenserver eine Antwort an den Client schickte. Derzeit habe ich keine Ahnung, wie ich das lösen soll.

    
Valar 26.12.2016, 12:49
quelle

1 Antwort

0

Warum kleben Sie nicht ein Überwachungstool wie Kibana oder New Relic und überwachen Sie, warum und was für eine geringe Payload-Antwort so lange dauert. Es kann Ihnen sagen, wie viel Zeit Sie mit Python, PostgreSQL und Memcache (Redis) verbracht haben.

    
Murat Sert 16.10.2017 14:49
quelle