Wie leistungsfähig ein Webserver im aktiven Projekteinsatz ist,hängt von unterschiedlichen Faktoren sowohl im Hardware- als auch Softwarebereich ab. Bereits kleine Änderungen an den einen oder anderen Komponenten beeinflussen die Performance. Mit Hilfe von entsprechenden Programmen lässt sich die Serverperformance testen und analysieren. Dieser Artikel befasst sich speziell mit dem Jmeter Test und Apache Benchmark Test.

Apache Benchmarks (Leistungstest)

Apache kommt mit einen eigenen Programm für Lasttests: ab (Apache Benchmark). Die Anwendung ist nicht nur für Linux/UNIX-Systemen verfügbar und ist relativ einfach einzusetzen. Man startet das Kommandozeilen Programm mit folgenden Parametern:

ab -n500 -c5 http://example.com/
  • “-n 500” legt fest, dass 500 Anfragen (Requests) abgefeuert werden
  • “-c 5” legt fest, dass 5 Anfragen gleichzeitig abgefeuert werden
  • Mit dritten Parameter wird hier die URL angegeben, auf welche der Tests angewandt werden soll. Wichtig: wenn nur die Domain (also ohne Skriptangaben) verwendet wird, muss ein abschließender Slash angegeben werden.

Zum obigen Beispiel erhält man folgendes Ergebnis:

This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking example.com (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Finished 500 requests


Server Software:        BigIP
Server Hostname:        example.com
Server Port:            80

Document Path:          /
Document Length:        0 bytes

Concurrency Level:      5
Time taken for tests:   44.918 seconds
Complete requests:      500
Failed requests:        0
Write errors:           0
Non-2xx responses:      500
Total transferred:      61500 bytes
HTML transferred:       0 bytes
Requests per second:    11.13 [#/sec] (mean)
Time per request:       449.183 [ms] (mean)
Time per request:       89.837 [ms] (mean, across all concurrent requests)
Transfer rate:          1.34 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:      197  225  13.3    224     381
Processing:   198  222   9.0    221     263
Waiting:      196  222   8.6    221     258
Total:        394  448  19.2    446     599

Percentage of the requests served within a certain time (ms)
  50%    446
  66%    453
  75%    458
  80%    463
  90%    470
  95%    475
  98%    482
  99%    487
 100%    599 (longest request)

Daraus kann man entnehmen, dass 11,13 Anfragen in der Sekunde erreicht wurden. 95% aller Anfragen wurde in 475ms ausgeliefert.

Es gibt eine ganze Reihe von Optionen. Hier liste ich mal alle Parameter, die mit ab zur Verfügung stehen auf:

Usage: ab [options] [http[s]://]hostname[:port]/path
Options are:
    -n requests     Number of requests to perform
    -c concurrency  Number of multiple requests to make
    -t timelimit    Seconds to max. wait for responses
    -b windowsize   Size of TCP send/receive buffer, in bytes
    -p postfile     File containing data to POST. Remember also to set -T
    -T content-type Content-type header for POSTing, eg.
                    'application/x-www-form-urlencoded'
                    Default is 'text/plain'
    -v verbosity    How much troubleshooting info to print
    -w              Print out results in HTML tables
    -i              Use HEAD instead of GET
    -x attributes   String to insert as table attributes
    -y attributes   String to insert as tr attributes
    -z attributes   String to insert as td or th attributes
    -C attribute    Add cookie, eg. 'Apache=1234. (repeatable)
    -H attribute    Add Arbitrary header line, eg. 'Accept-Encoding: gzip'
                    Inserted after all normal header lines. (repeatable)
    -A attribute    Add Basic WWW Authentication, the attributes
                    are a colon separated username and password.
    -P attribute    Add Basic Proxy Authentication, the attributes
                    are a colon separated username and password.
    -X proxy:port   Proxyserver and port number to use
    -V              Print version number and exit
    -k              Use HTTP KeepAlive feature
    -d              Do not show percentiles served table.
    -S              Do not show confidence estimators and warnings.
    -g filename     Output collected data to gnuplot format file.
    -e filename     Output CSV file with percentages served
    -r              Don't exit on socket receive errors.
    -h              Display usage information (this message)
    -Z ciphersuite  Specify SSL/TLS cipher suite (See openssl ciphers)
    -f protocol     Specify SSL/TLS protocol (SSL2, SSL3, TLS1, or ALL)

Eine weiterführende Dokumentation befindet sich auf der Website der Apache Software Foundation.

Aussagekraft eines Tests

Ein Test ist nur aussagekräftig, wenn man auch die Rahmenbedingungen zum Tests angibt:

  • welche Hardwareumgebung wird verwendet (Prozessor, Speicherkapazität, Festplatten, u.s.w.)
  • welche Softwareumgebung wird eingesetzt (Windows, Linux, PHP Version, Apache Version, MySQL, u.s.w.)
  • welche Projekt Frameworks / Module wurden verwendet (z.B. Drupal Version, aktivierte Module mit Drupal)

Jmeter Tests

Jmeter ist ein Java Programm mit einem grafischen Benutzer-Interface. Mit Hilfe dieser Anwendung testet man die die Performance sowohl von statischen als auch dynamischen Komponenten (Dateien, Servlets, Perl Skripete, Javaobjekte, Datenbanken und Abfragen, FTP Server etc.). Es ist möglich die Last und Performance verschiedener Servertypen zu testen wie etwa:

  • Web - HTTP, HTTPS
  • SOAP
  • LDAP
  • JMS
  • Mailserver - SMTP(S), POP3(S), IMAP(S)
  • Native commands or shell scripts

Die ganze Konfiguration erfolgt über die grafische Oberfläche. Die Ausführung des Tests kann dann wahlweise über die GUI oder über die Kommandozeile durchgeführt werden. Mit Jmeter ist es sehr einfach Klickpfade des Benutzers anzulegen, oder auch über einen HTTP Proxy aufzuzeichnen. Oft wird bei Tests zwischen nicht-angemeldeten und angemeldeten Besuchern unterschieden, wofür ein Cookie gespeichert werden muss. Auch dies ist mit jmeter möglich.

Jmeter Test

Aktualisiert: