Sporadisch 10fach langsamer

10/08/2011 - 22:18 von Thomas Guettler | Report spam
Hallo,

gegeben ist eine Intranet Anwendung (Django+Postgres), die
auf einen gut ausgebauten Server làuft.

Sporadisch dauern die Requests zehnmal so lange. Ich konnte
die Ursache aber noch nicht finden.

Es hat sicher **nichts** mit dem Netzwerk zu tun. Die Zeitmessung
beginnt nach dem Empfang des Requests und endet vor dem Senden
des Response.

Die Datenbank wird per Unix-Domain Socket angesprochen.

Parallel laufen auch keine Prozesse, die Last (CPU, Memory, IO) erzeugen
könnten. Der Server langweilt sich nur: 8 Cores, 8 GB RAM.

Dummerweise làsst sich das nicht reproduzieren, tritt aber tàglich auf.

Habt Ihre Ideen wie man den Fehler finden könnte?

Meine Idee: Alle N Millisekunden merkt sich der Request-Handler
in welcher Methode er sich gerade befindet. Am Ende des Requests
wird das ausgegeben, falls der Request deutlich lànger als sonst
gedauert hat. So könnte man die Stelle im Quelltext finden, die
deutlich lànger dauert als sonst.
Dieses Logging sollte den Ablauf nicht deutlich verlangsamen
(Produktivsystem)

Wie könnte man das machen? Um Threads habe ich bisher immer einen
weiten Bogen gemacht.

Gruß,
Thomas
 

Lesen sie die antworten

#1 markus espenhain
10/08/2011 - 23:05 | Warnen spam
On 08/10/11 22:18, Thomas Guettler wrote:
Hallo,

gegeben ist eine Intranet Anwendung (Django+Postgres), die
auf einen gut ausgebauten Server làuft.

Sporadisch dauern die Requests zehnmal so lange. Ich konnte
die Ursache aber noch nicht finden.

Es hat sicher **nichts** mit dem Netzwerk zu tun. Die Zeitmessung
beginnt nach dem Empfang des Requests und endet vor dem Senden
des Response.

Die Datenbank wird per Unix-Domain Socket angesprochen.

Parallel laufen auch keine Prozesse, die Last (CPU, Memory, IO) erzeugen
könnten. Der Server langweilt sich nur: 8 Cores, 8 GB RAM.

Dummerweise làsst sich das nicht reproduzieren, tritt aber tàglich auf.

Habt Ihre Ideen wie man den Fehler finden könnte?

Meine Idee: Alle N Millisekunden merkt sich der Request-Handler
in welcher Methode er sich gerade befindet. Am Ende des Requests
wird das ausgegeben, falls der Request deutlich lànger als sonst
gedauert hat. So könnte man die Stelle im Quelltext finden, die
deutlich lànger dauert als sonst.
Dieses Logging sollte den Ablauf nicht deutlich verlangsamen
(Produktivsystem)

Wie könnte man das machen? Um Threads habe ich bisher immer einen
weiten Bogen gemacht.

Gruß,
Thomas




Hi,

bevor du deine Python-App zerlegst - hast du dir mal die PG-Datenbank
angesehen? - Query-Log, Config, etc - manche Postgres Default-Configs
sind je nach Anwendung oft ... suboptimal.

Markus

Ähnliche fragen