Apache JMeter Cheatsheet¶
Installation¶
| Plattform | Befehl |
|---|---|
| Ubuntu/Debian | sudo apt update && sudo apt install jmeter |
| Ubuntu (Snap) | sudo snap install jmeter |
| macOS (Homebrew) | brew install jmeter |
| Windows (Chocolatey) | choco install jmeter |
| Binary (Linux/macOS) | wget https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.6.3.tgz && tar -xzf apache-jmeter-5.6.3.tgz |
| Docker | docker pull justb4/jmeter:latest |
| Prerequisites | Java JDK 8+ required: java -version |
Grundlegende Befehle¶
| Befehl | Beschreibung |
|---|---|
jmeter |
JMeter GUI starten |
jmeter -t test-plan.jmx |
Öffnen Sie den spezifischen Testplan in der GUI |
jmeter -n -t test.jmx -l results.jtl |
Test im Non-GUI-Modus ausführen mit Ergebnissen |
jmeter -n -t test.jmx -l results.jtl -e -o report/ |
Test ausführen und HTML-Dashboard generieren |
jmeter --version or jmeter -v |
JMeter-Version anzeigen |
jmeter --help or jmeter -h |
Hilfe und verfügbare Optionen anzeigen |
jmeter -? |
Alle verfügbaren Eigenschaften auflisten |
jmeter -n -t test.jmx -j jmeter.log |
Test mit benutzerdefinierter Logdatei ausführen |
jmeter -g results.jtl -o dashboard/ |
HTML-Bericht aus vorhandenen Ergebnissen generieren |
jmeter -p custom.properties |
Start mit benutzerdefinierter Eigenschaften-Datei |
jmeter -Xmx4g |
Start mit erhöhter Heap-Größe (4GB) |
jmeter-server |
JMeter im Servermodus für verteiltes Testen starten |
jmeter -n -t test.jmx -l results.csv |
Test ausführen und Ergebnisse als CSV speichern |
jmeter -n -t test.jmx -l results.xml |
Test ausführen und Ergebnisse als XML speichern |
jmeter -Jusers=100 |
Eigenschaftswert zur Laufzeit überschreiben |
| ## Erweiterte Nutzung |
| Befehl | Beschreibung |
|---|---|
jmeter -n -t test.jmx -r |
Test auf allen Remote-Servern durchführen |
jmeter -n -t test.jmx -R server1:1099,server2:1099 |
Test auf bestimmten Remote-Servern durchführen |
jmeter -n -t test.jmx -Gusers=100 -Grampup=60 |
Globale Eigenschaften für Remote-Server festlegen |
jmeter -n -t test.jmx -r -X |
Verteilten Test ausführen und Remote-Server danach beenden |
jmeter -n -t test.jmx -q env.properties -q users.properties |
Verwenden Sie mehrere Eigenschaftendateien |
jmeter -H proxy.example.com -P 8080 |
Mit HTTP-Proxy ausführen |
jmeter -H proxy.com -P 8080 -u username -a password |
Mit authentifiziertem Proxy ausführen |
jmeter -Lorg.apache.jmeter=DEBUG |
Setze Log-Level auf DEBUG |
jmeter -Lorg.apache.jmeter.protocol.http=DEBUG |
Log-Level für spezifisches Paket festlegen |
jmeter-server -Djava.rmi.server.hostname=192.168.1.100 |
Server mit spezifischem Hostnamen starten |
jmeter-server -Dserver_port=1099 |
Server auf benutzerdefiniertem Port starten |
jmeter -n -t test.jmx -Jsummariser.interval=30 |
Zusammenfassungsintervall auf 30 Sekunden setzen |
jmeter -n -t test.jmx -Jjmeter.save.saveservice.output_format=xml |
XML-Ausgabeformat erzwingen |
jmeter -n -t test.jmx -Jjmeter.save.saveservice.response_data=true |
Antwortdaten in Ergebnisse einbeziehen |
jmeter -XX:+UseG1GC -n -t test.jmx |
Mit G1-Garbage-Collector ausführen |
jmeter -Dcom.sun.management.jmxremote -n -t test.jmx |
JMX-Monitoring aktivieren |
jmeter -Dhttp.keepAlive=false -n -t test.jmx |
HTTP Keep-Alive deaktivieren |
jmeter -g results.jtl -o dashboard/ -f |
Vorhandenes Dashboard überschreiben erzwingen |
jmeter -N "localhost | *.internal.com" |
Nicht-Proxy-Hosts festlegen |
PluginsManagerCMD.sh install jpgc-casutg,jpgc-synthesis |
JMeter-Plugins über CLI installieren |
| ## Konfiguration |
JMeter Eigenschaften-Datei (jmeter.properties)¶
# Thread and ramp-up settings
jmeter.threads=100
jmeter.rampup=60
# Remote server configuration
remote_hosts=server1:1099,server2:1099,server3:1099
# Result file configuration
jmeter.save.saveservice.output_format=csv
jmeter.save.saveservice.response_data=false
jmeter.save.saveservice.samplerData=false
jmeter.save.saveservice.requestHeaders=false
jmeter.save.saveservice.url=true
jmeter.save.saveservice.responseHeaders=false
# HTTP settings
httpclient.reset_state_on_thread_group_iteration=true
http.keepAlive=true
http.connection.timeout=30000
http.socket.timeout=120000
# Summariser interval (seconds)
summariser.interval=30
# Log level
log_level.jmeter=INFO
log_level.jmeter.engine=DEBUG
Benutzer-Eigenschaften-Datei (user.properties)¶
# Custom variables
baseurl=https://example.com
users=100
rampup=60
duration=300
# Environment-specific settings
env=production
api_key=your_api_key_here
Systemeigenschaften¶
# Set system properties via command line
jmeter -Dhttp.proxyHost=proxy.example.com \
-Dhttp.proxyPort=8080 \
-Dhttps.proxyHost=proxy.example.com \
-Dhttps.proxyPort=8080 \
-n -t test.jmx
JVM-Konfiguration (jmeterSkript)¶
# Edit JMETER_HOME/bin/jmeter or set environment variable
export HEAP="-Xms1g -Xmx4g -XX:MaxMetaspaceSize=256m"
export GC_ALGO="-XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:G1ReservePercent=20"
export JVM_ARGS="$HEAP $GC_ALGO"
Konfiguration für verteiltes Testen¶
# In jmeter.properties on controller machine
remote_hosts=192.168.1.101:1099,192.168.1.102:1099,192.168.1.103:1099
# Server RMI configuration
server.rmi.ssl.disable=true
server.rmi.localport=4000
server_port=1099
# On remote server machines
java.rmi.server.hostname=192.168.1.101
Häufige Anwendungsfälle¶
Anwendungsfall 1: Grundlegender Lasttest mit HTML-Bericht¶
# Run load test with 100 users, 60s ramp-up, generate HTML report
jmeter -n -t load-test.jmx \
-Jusers=100 \
-Jrampup=60 \
-Jduration=300 \
-l results/results.jtl \
-e -o results/dashboard/ \
-j results/jmeter.log
# View the report
open results/dashboard/index.html # macOS
xdg-open results/dashboard/index.html # Linux
Anwendungsfall 2: Verteilter Lasttest über mehrere Server¶
# Step 1: Start JMeter servers on remote machines
# On server1 (192.168.1.101):
jmeter-server -Djava.rmi.server.hostname=192.168.1.101
# On server2 (192.168.1.102):
jmeter-server -Djava.rmi.server.hostname=192.168.1.102
# Step 2: Run distributed test from controller
jmeter -n -t distributed-test.jmx \
-R 192.168.1.101:1099,192.168.1.102:1099 \
-Gusers=500 \
-Grampup=120 \
-l distributed-results.jtl \
-e -o distributed-report/
# Step 3: Shutdown remote servers
jmeter -n -t distributed-test.jmx -R 192.168.1.101:1099,192.168.1.102:1099 -X
Anwendungsfall 3: API-Performance-Test mit mehreren Umgebungen¶
# Create environment-specific property files
# dev.properties:
echo "baseurl=https://dev-api.example.com" > dev.properties
echo "api_key=dev_key_123" >> dev.properties
# prod.properties:
echo "baseurl=https://api.example.com" > prod.properties
echo "api_key=prod_key_456" >> prod.properties
# Run test against dev environment
jmeter -n -t api-test.jmx \
-q dev.properties \
-Jusers=50 \
-l dev-results.jtl \
-e -o dev-report/
# Run test against production environment
jmeter -n -t api-test.jmx \
-q prod.properties \
-Jusers=200 \
-l prod-results.jtl \
-e -o prod-report/
Anwendungsfall 4: CI/CD-Integration (Jenkins/GitLab)¶
#!/bin/bash
# performance-test.sh - CI/CD pipeline script
# Set variables
TEST_PLAN="test-plans/load-test.jmx"
RESULTS_DIR="results/$(date +%Y%m%d_%H%M%S)"
USERS=${USERS:-100}
DURATION=${DURATION:-300}
# Create results directory
mkdir -p $RESULTS_DIR
# Run JMeter test
jmeter -n -t $TEST_PLAN \
-Jusers=$USERS \
-Jduration=$DURATION \
-l $RESULTS_DIR/results.jtl \
-e -o $RESULTS_DIR/dashboard/ \
-j $RESULTS_DIR/jmeter.log
# Check for errors (exit code)
if [ $? -eq 0 ]; then
echo "Test completed successfully"
# Archive results
tar -czf $RESULTS_DIR.tar.gz $RESULTS_DIR
# Optional: Upload to artifact storage
# aws s3 cp $RESULTS_DIR.tar.gz s3://bucket/results/
else
echo "Test failed with errors"
exit 1
fi
Anwendungsfall 5: Datenbank-Performance-Test¶
# Test database performance with parameterized queries
jmeter -n -t database-test.jmx \
-Jdb.host=db.example.com \
-Jdb.port=5432 \
-Jdb.name=testdb \
-Jdb.user=testuser \
-Jdb.password=testpass \
-Jthreads=50 \
-Jrampup=30 \
-l db-results.jtl \
-e -o db-report/
# Generate report from existing results
jmeter -g db-results.jtl -o db-report-regenerated/
Bewährte Praktiken¶
-
Verwenden Sie immer den Nicht-GUI-Modus für tatsächliche Tests: Der GUI-Modus verbraucht erhebliche Ressourcen und beeinträchtigt die Testgenauigkeit. Verwenden Sie
jmeter -nfür alle Performance-Tests. -
Weisen Sie ausreichend Heap-Speicher zu: Setzen Sie die JVM-Heap-Größe auf mindestens 25% des verfügbaren RAMs. Für große Tests:
export JVM_ARGS="-Xms2g -Xmx4g -XX:+UseG1GC" - CSV-Format für Ergebnisdateien verwenden: CSV-Format ist effizienter als XML. Deaktivieren Sie unnötige Datensammlung, um Overhead zu reduzieren:
jmeter.save.saveservice.response_data=false -
Ordnungsgemäße Anlaufperioden implementieren: Vermeiden Sie das gleichzeitige Starten aller Threads. Verwenden Sie einen graduellen Anlauf (typischerweise 10-20% der Testdauer), um realistische Lastmuster zu simulieren.
-
Verteiltes Testen für hohe Lasten nutzen: Einschränkungen einer einzelnen Maschine können Ergebnisse verzerren. Verwenden Sie mehrere JMeter-Server für Tests mit mehr als 500-1000 Threads.
-
Testdaten parametrisieren: Verwenden Sie CSV Data Set Config oder Variablen anstelle von hartcodierten Werten. Dies ermöglicht eine einfache Testkonfiguration und Umgebungsumstellung.
-
Systemressourcen während der Tests überwachen: Verfolgen Sie CPU, Arbeitsspeicher, Netzwerk und Festplatten-I/O auf JMeter-Maschinen und Zielsystemen. Hohe Ressourcenauslastung auf JMeter deutet auf Engpässe bei der Testausführung hin.
-
Testpläne unter Versionskontrolle stellen:
.jmxDateien und Eigenschaftsdateien in Git speichern. Verwenden Sie aussagekräftige Commit-Nachrichten und markieren Sie Releases für Reproduzierbarkeit. -
Ordnungsgemäße Korrelation und Assertionen implementieren: Extrahieren Sie dynamische Werte (Token, Session-IDs) und validieren Sie Antworten. Messen Sie nicht nur die Geschwindigkeit - überprüfen Sie die Korrektheit.
-
Zwischen Testläufen aufräumen: Ergebnisverzeichnisse und Logs löschen. Setzen Sie den Anwendungszustand bei Bedarf zurück, um konsistente Testbedingungen zu gewährleisten.
Fehlerbehebung¶
| Problem | Lösung |
|---|---|
| OutOfMemoryError during test | Increase heap size: export JVM_ARGS="-Xms2g -Xmx4g" or reduce threads/disable response data saving |
| Connection refused on remote servers | Check firewall rules for ports 1099 and 4000. Verify java.rmi.server.hostname is set correctly on server |
| Test results show 100% errors | Verify target URL is accessible, check proxy settings, review jmeter.log for detailed error messages |
| GUI freezes during large tests | Never run large tests in GUI mode. Use non-GUI: jmeter -n -t test.jmx -l results.jtl |
| Inconsistent results between runs | Sicherstellen des ordnungsgemäßen Hochfahrens, Cache/Cookies zwischen Durchläufen löschen, Netzwerkstabilität überprüfen, Auslastung des Zielsystems prüfen |
| Cannot generate HTML report | Verify results file format is compatible (CSV/JTL), ensure output directory is empty or use -f flag to force overwrite |
| Remote servers not starting | Check Java version compatibility (JDK 8+), verify RMI registry port is available, review jmeter-server.log |
| SSL/TLS certificate errors | Add certificate to Java keystore or disable validation: jmeter -Jhttps.default.protocol=TLSv1.2 |
| Slow test execution | Listener in Nicht-GUI-Modus deaktivieren, Assertionskomplexität reduzieren, reguläre Ausdrücke optimieren, effiziente Extraktoren verwenden |
| "Non HTTP response code: java.net.SocketException" | Erhöhen Sie Timeout-Werte, überprüfen Sie Connection-Pool-Einstellungen, verifizieren Sie Kapazität des Zielsystems, reduzieren Sie Thread-Anzahl |
| Distributed test results incomplete | Stellen Sie sicher, dass alle Server die gleiche Testplan-Version haben, überprüfen Sie die Netzwerkverbindung, verifizieren Sie die Uhrzeitsynschronisation über alle Server |
| High CPU on JMeter machine | Reduzieren Sie die Thread-Anzahl, deaktivieren Sie unnötige Prozessoren/Listener, verwenden Sie einfachere Sampler, erwägen Sie verteiltes Testen |
| Cannot install plugins | Download Plugins Manager JAR manually to lib/ext/, ensure internet connectivity, check proxy settings |
| Results file corrupted or empty | Stellen Sie ausreichenden Festplattenspeicher sicher, überprüfen Sie Dateiberechtigungen, verifizieren Sie, dass der JMeter-Prozess erfolgreich abgeschlossen wurde |
| "Address already in use" error | Change server port: jmeter-server -Dserver_port=1100, kill existing JMeter processes, wait for port release |
| ## Schnellreferenz: Befehlszeilenoptionen |
| Option | Beschreibung | Beispiel |
|---|---|---|
-n |
Nicht-GUI-Modus | jmeter -n -t test.jmx |
-t |
Test-Plan-Datei | jmeter -t mytest.jmx |
-l |
Ergebnisprotokoll-Datei | jmeter -n -t test.jmx -l results.jtl |
-j |
JMeter-Protokolldatei | jmeter -n -t test.jmx -j jmeter.log |
-r |
Auf allen Remote-Servern ausführen | jmeter -n -t test.jmx -r |
-R |
Auf bestimmten Servern ausführen | jmeter -n -t test.jmx -R server1,server2 |
-g |
Bericht aus Datei generieren | jmeter -g results.jtl -o report/ |
-e |
Bericht nach Test generieren | jmeter -n -t test.jmx -l results.jtl -e -o report/ |
-o |
Ausgabeordner für Bericht | jmeter -g results.jtl -o dashboard/ |
-H |
Proxy-Host | jmeter -H proxy.com -P 8080 |
-P |
Proxy-Port | jmeter -H proxy.com -P 8080 |
-u |
Proxy-Benutzername | jmeter -H proxy.com -P 8080 -u user |
-a |
Proxy-Passwort | jmeter -H proxy.com -P 8080 -a pass |
-J |
JMeter-Eigenschaft definieren | jmeter -Jusers=100 -Jrampup=60 |
-G |
Globale Eigenschaft definieren | jmeter -Gusers=100 (for remote servers) |
-D |
Systemeigenschaft definieren | jmeter -Dhttp.proxyHost=proxy.com |
-L |
Log-Level festlegen | jmeter -Lorg.apache.jmeter=DEBUG |
-p |
Property-Datei | jmeter -p custom.properties |
-q |
Zusätzliche Eigenschaftsdatei | jmeter -q env.properties |
-X |
Remote-Server verlassen | jmeter -n -t test.jmx -r -X |