Über folgende Java-Optionen kann ein Garbage-Collector-Logfile geschrieben werden:
-XX:+PrintGC -XX:+PrintGCTimeStamps -Xloggc:logs/gcoutput.log
Zur Analyse können folgende Tools verwendet werden:
- HPjtune, bzw. dessen Nachfolger HPjmeter Console
- Tagtraum GCViewer
28. Februar 2008
13. Februar 2008
jstat, jmap, jps,... funktioniert nicht wenn der Java-Prozess per Windows "Scheduled Task" gestartet wurde
Problem: Ein Java-Prozess wird per Schedulded Task gestartet. Wenn JDK-Tools wie jmap, jps oder jstat auf diesen Prozess verwendet werden, erhält man die Fehlermeldung "process information unavailable" oder "Not enough storage is available to process this command".
Workaround: Eine zweite Scheduled Task anlegen, die das gewünschte Tool ausführt, dann funktioniert der Zugriff auf den anderen, per Scheduled Task gestarteten Java-Prozess.
Workaround: Eine zweite Scheduled Task anlegen, die das gewünschte Tool ausführt, dann funktioniert der Zugriff auf den anderen, per Scheduled Task gestarteten Java-Prozess.
12. Februar 2008
JMeter und JSF
Problem: Bei JSF gibt es die Besonderheit, dass auf der Clientseite in einem "hidden field" ein ViewState gespeichert wird. Dieser ermöglicht dem Server die Zuordung zu einem ComponentTree. Der Inhalt dieses Feldes variiert bei jedem Aufruf und muss immer mitgeschickt werden. Mit einem Standard-JMeter-Test ist dies nicht möglich.
Lösung: Durch die Verwendung eines "Regular Expression Extractor" kann immer der richtige Feldinhalt mitgeschickt werden.
Schritt 1:
Bei JMeter muss in der Thread Gruppe ein "Regular Expression Extractor" angelegt werden mit folgenden Eigenschaften:
Für die SUN-RI:
Bei jeder aufgezeichneten JSP im Recording Controller muss unter "Parameter die mit dem Request gesendet werden" die oben definierte Variable gesetzt werden:
Lösung: Durch die Verwendung eines "Regular Expression Extractor" kann immer der richtige Feldinhalt mitgeschickt werden.
Schritt 1:
Bei JMeter muss in der Thread Gruppe ein "Regular Expression Extractor" angelegt werden mit folgenden Eigenschaften:
Für die SUN-RI:
- Respons Field to check: body
- Reference name: jsfViewState
- Regular Expression: <input type="hidden" name="com\.sun\.faces\.VIEW" id="com\.sun\.faces\.VIEW" value="(.+?)" />
- Template: $1$
- Match No.: 0
- Default Value: leer
- Respons Field to check: body
- Reference name: jsfViewState
- Regular Expression: <input type="hidden" name="javax\.faces\.ViewState" id="javax\.faces\.ViewState" value="(.+?)" />
- Template: $1$
- Match No.: o
- Default Value: leer
Bei jeder aufgezeichneten JSP im Recording Controller muss unter "Parameter die mit dem Request gesendet werden" die oben definierte Variable gesetzt werden:
- bei SUN RI
- Das Feld "com.sun.faces.VIEW" mit dem Wert "${jsfViewState}" überschrieben werden
- bei Apache MyFaces
- Das Feld "javax.faces.ViewState" mit dem Wert "${jsfViewState}" überschrieben werden
8. Februar 2008
JMeter Webtest aufzeichnen und abspielen
Schritt 1: Vorbereitung im JMeter
Schritt 2: Test aufzeichnen
- Unter Testplan
- Eine neue Threadgruppe anlegen
- Einen HTTP Cookie Manager anlegen (damit Cookie-basierte Anwendungen funktionieren und die Session zugeordnet werden kann)
- Alternativ kann auch ein HTTP URL Re-writing Modifier angelegt werden
- als Session Argument Name muss dort z.B. jsessonid hinterlegt werden
- Einen Recording Controller anlegen
- in diesem werden die Aufzeichnungen des Http Proxy Server abgelegt
- Unter Workbench
- Einen Http Proxy Server anlegen
- Als Target Controller den Recording Controller auswählen
Schritt 2: Test aufzeichnen
- Browser öffnen und als Proxy Server den Port eingeben der im JMeter beim Http Proxy Server angegeben wurde (Default=8080)
- Browser-Cache und Cookies löschen
- Im JMeter beim Http Proxy Server auf "Start" drücken
- Gewünschte Seiten im Browser aufrufen
- Im JMeter beim Http Proxy Server auf "Stop" drücken
- Die Seiten wurden im Recording Controller abgelegt, dort können Sie nachträglich nachbearbeitet werden, z.B. durch Variablen
- In der Threadgruppe kann nun die Häufigkeit und Parallelität der Ausführung gewählt werden
- Zur Auswertung des Ergebnis sollten der Threadgruppe nun noch Lauscher (Listeners) hinzugefügt werden (z.B. Summary Report)
- Über das Menü Start/Start kann der Test gestartet werde
5. Februar 2008
synchronized bei Methoden
normales Methoden-synchronized
public class MyClass
{
...
public synchronized int rechne()
{
// Code hier
}
...
}
entspricht
public class MyClass
{
...
public int rechne()
{
synchronized(this)
{
// Code hier
}
}
...
}
synchronized bei einer statischen Methode
public class MyClass
{
...
public static synchronized int machwas()
{
// Code hier
}
...
}
entspricht
public class MyClass
{
...
public static int machwas()
{
synchronized(MyClass.class)
{
// Code hier
}
}
...
}
public class MyClass
{
...
public synchronized int rechne()
{
// Code hier
}
...
}
entspricht
public class MyClass
{
...
public int rechne()
{
synchronized(this)
{
// Code hier
}
}
...
}
synchronized bei einer statischen Methode
public class MyClass
{
...
public static synchronized int machwas()
{
// Code hier
}
...
}
entspricht
public class MyClass
{
...
public static int machwas()
{
synchronized(MyClass.class)
{
// Code hier
}
}
...
}
4. Februar 2008
Thread Dumps erzeugen unter Java
Vor JDK 1.5
Windows:
"Ctrl" + "Break" erzeugt einen Thread Dump in Standard-Out
Linux/Unix:
kill -3 <pid> erzeugt einen Thread Dump in Standard-Out
Ab JDK 1.5
Über das Tool jstack aus dem Java SDK:
jstack <pid> >stack.txt
Analyse-Tools:
Windows:
"Ctrl" + "Break" erzeugt einen Thread Dump in Standard-Out
Linux/Unix:
kill -3 <pid> erzeugt einen Thread Dump in Standard-Out
Ab JDK 1.5
Über das Tool jstack aus dem Java SDK:
jstack <pid> >stack.txt
Analyse-Tools:
- TDA (OpenSource-Tool) Thread Dump Analyzer zur Analyse von Textfiles-Dumps:
- Threads waiting for a monitor:
- Ein Thread wartet vor einem synchronized-Block, der gerade von einem anderen Thread durchlaufen wird
- Threads sleeping on a monitor:
- Ein Thread ist innerhalb eines sychronized-Blocks und ruft dort wait() auf
Abonnieren
Posts (Atom)