Langsamer Request

Problem

In einer Webapplikation wurden sehr langsame Requests mit bis zu 30 Sekunden Laufzeit gemessen. Die MySQL Logdatei zeigte keine dazughörigen Slow Queries, sodass das Problem bei GlassFish oder bei der Applikation zu suchen war.

Synchronized

Durch spezielles Logging wurde schliesslich die Ursache für die schlechte Performance in einer Klasse mit compilierten Regular Expression Pattern, das als Blacklist Filter für alle User verwendet wurde, gefunden.

Das Objekt wurde auf Application Scope Ebene gespeichert und die Methode zur Prüfung von Eingaben wurde mit synchronized definiert. Durch diesen Fehler mussten alle folgenden Requests warten, bis die Prüfung des aktuellen Requests vollständig durchlaufen wurde.

Langsamer Client

Trotz des Bugfixing zeigten die Logs jedoch immernoch bis zu tausend Requests pro Tag mit zu langer Laufzeit. Komischerweise traten diese beim ersten Aufruf von HttpServletRequest.getParameter auf.

Eine Diskussion mit Jean-Francois Arcand von Sun brachte, dass die langen Laufzeiten durch langsame Clients bzw. Netzwerkverbindungen zustande kommen. GlassFish versucht die angefragten Daten zu lesen, diese sind jedoch vom Client noch nicht oder zu langsam gesendet worden.

Erweitertes Logging zeigte, dass diese langsamen Requests hauptsächlich bei WAP Clients auftraten und zwar bei POST-Requests. Anscheinend werden die POST-Parameter erst bei expliziter Anfrage gesendet.

Lösung

Das Problem mit langsamen Clients bzw. Netzwerkverbindungen kann natürlich nicht durch GlassFish gelöst werden. Einzige was man tun kann ist die Request Queue Grösse unter HTTP Service zu erhöhen, damit gepoolte Requests nicht ablaufen bzw. abgewiesen werden.

Max Pending Count: 8192

Resourcen

[1] GlassFish V2

Johannes Hammoud Langsamer Request 06.07.2008

I Coding : Community über Java Programmierung

Sprache Englisch+-

Java JSF JavaScript HTML CSS NetBeans GlassFish MySQL

Impressum

Besuche
6279994
Heute
7316