sporadische Tomcat-Latenz

8

Ich habe unsere Antwortzeit auf Tomcat Micro-optimiert und in fast allen Fällen sehe ich eine Antwortzeit von 50ms , wenn ich immer und immer wieder auffrische, aber wenn die Seite nicht getroffen wird Nach ein oder zwei Sekunden springt die Reaktionszeit auf 500ms zurück.

Ich habe das gleiche Verhalten gesehen, unabhängig von lokalen, nicht lokalen, APR, NIO, JIO, statischen oder dynamischen Antworten (dh Serving statische Datei oder Übergabe der Antwort dynamisch). Bisher habe ich noch nicht gesehen, dass dieses Verhalten nicht auf Tomcat passiert (das ist konsistent unter 400ms unabhängig von der Häufigkeit).

Ich habe Visual VM auch verwendet, um nach Hinweisen zu suchen.

Ich dachte, es wäre eine Art "Keep alive", aber wenn ich Apache Bench betreibe, bekomme ich sogar noch schnellere Antwortzeiten (unter 50 ms) (offensichtlich, weil es häufig darauf trifft).

Wie halten Sie also eine geringe Latenz, die URL in Tomcat nicht häufig trifft? Vielleicht ist diese Frage besser für ServerFault?

UPDATE: Ich bin fast sicher, dass es sich um ein Tomcat 6-Problem handelt. Ich dachte, ich hätte auf Tomcat 7 getestet, aber ich habe es erneut getestet und hatte kein Problem (siehe Ergebnisse unten). Selbst das neueste Tomcat 6 hat immer noch dieses Problem.

Hier ist der ab -Ausgang für Tomcat 6 (notice the max):

%Vor%

Hier ist ab output für Tomcat 7 beachten Sie die max:

%Vor%

Die Tomcat-Versionen sind der einzige Unterschied (dieselbe Maschine, dasselbe JDK, usw.). Ich war mir sicher, dass die neueste Version von Tomcat 6 in Ordnung sein wird, aber es hat eine ähnliche Latenz auf erste Anfrage.

    
Adam Gent 21.02.2013, 16:44
quelle

1 Antwort

1

Wenn ich auf den Kater-Code schaue, habe ich mich entschieden, das Wort "Schwach" nach der Theorie zu suchen, dass Ihr Problem darin besteht, dass etwas in einer schwachen Referenz gesammelt wird, wenn Sie nicht schnell nachfragen.

Ich kam auf die folgende Vermutung ... Ich fand diese interessante Klasse:

Ссылка

Es scheint, einen Cache von BeanProperties-Objekten beizubehalten, von denen ein Teil von einer WeakHashMap gehandhabt wird, und wenn der Cache voll ist, wird alles in eine WeakHashMap gestellt und kann Garbage Collected sein. Wenn Elemente in der schwachen Karte angefordert werden, werden sie in die Hauptkarte zurückgelegt (die nicht schwach ist). Wenn Ihre Seite dieses Verhalten direkt am Ende Ihrer Verarbeitung auslöst (indem Sie etwas wie die Größe des Cache in BeanProperties hinzufügen, können Sie fast alle zwischengespeicherten Bean-Beschreibungen wegwerfen).

Praktischerweise gibt es eine Eigenschaft, um dies zu tun:

%Vor%

Versuchen Sie vielleicht, damit zu spielen und zu sehen, ob es das Verhalten beeinflusst? Dies ist jedoch nicht der Fall, da ich in Tomcat 7 in dieser Klasse keine große Veränderung (schnellen Blick) gesehen habe, in der Sie sagen, dass Ihr Problem verschwindet. (Haben Sie diese Eigenschaft bei Ihren vorherigen Optimierungsbemühungen optimiert?)

    
Gus 09.03.2013 03:19
quelle