{"id":16705,"date":"2026-03-02T23:59:00","date_gmt":"2026-03-02T22:59:00","guid":{"rendered":"https:\/\/u-labs.de\/portal\/?p=16705"},"modified":"2026-03-03T00:23:22","modified_gmt":"2026-03-02T23:23:22","slug":"webserver-lasttests-mit-oha-durchfuehren-auswerten","status":"publish","type":"post","link":"https:\/\/u-labs.de\/portal\/webserver-lasttests-mit-oha-durchfuehren-auswerten\/","title":{"rendered":"Webserver Lasttests mit oha durchf\u00fchren &amp; auswerten"},"content":{"rendered":"<p>Wie viele Anfragen h\u00e4lt meine Webanwendung bzw. Webseite aus? Bleibt sie dabei stabil? Diese &amp; weitere Fragen lassen sich durch k\u00fcnstlich erzeugte Last kl\u00e4ren. In diesem Beitrag stelle ich das quelloffene Programm <em>Oha<\/em> vor: Es bietet eine Tui-Oberfl\u00e4che und kann die Messwerte exportieren. Dar\u00fcber hinaus gehe ich auf Aspekte ein, welche bei solchen Tests grunds\u00e4tzlich beachtet werden sollten. Repr\u00e4sentativ werden sie durch wiederholte Durchl\u00e4ufe, aus denen wir mit GNU\/Linux Standardwerkzeugen den Durchschnitt berechnen.<\/p>\n<h2 class=\"wp-block-heading\">Aufbau &amp; Installation<\/h2>\n<p>Am einfachsten l\u00e4sst sich <em>Oha<\/em> \u00fcber die Bin\u00e4rdateien starten, welche in den GitHub-Releases ver\u00f6ffentlicht werden.<sup data-fn=\"c2a5b190-51a1-4969-b14f-29b3d51cc423\" class=\"fn\"><a href=\"#c2a5b190-51a1-4969-b14f-29b3d51cc423\" id=\"c2a5b190-51a1-4969-b14f-29b3d51cc423-link\">1<\/a><\/sup> Da eine ARM64-Edition existiert, kann man es ebenfalls auf dem Raspberry Pi sowie weiteren Einplatinencomputern nutzen. Zu beachten ist: Im Idealfall liegt der Webserver auf einer eigenen (Virtuellen) Maschine. Das macht den Test um so realistischer im Vergleich zu echten, organischen Besuchern. <\/p>\n<p>Wie relevant das ist, h\u00e4ngt im wesentlichen davon ab, was man messen m\u00f6chte. Geht es etwa um die Anzahl an Abfragen pro Sekunde, welche eine bestimmte Webanwendung verarbeiten kann, hat eine lokale Ausf\u00fchrung keine Nachteile. Allerdings sollte der Webserver m\u00f6glichst identisch dimensioniert sein, wie das produktive System! Zumindest hinsichtlich des Arbeitsspeichers. Wer mit einem starken Desktop-Prozessor testet, wird bei CPU-Lastigen Anwendungen weitaus bessere Ergebnisse messen, als der \u00e4ltere (und ggf. virtualisierte) Produktivserver.<\/p>\n<p><strong>Das ausf\u00fchren gegen\u00fcber fremden Seiten ist zu unterlassen! Auch mit eigenen Servern in fremden Rechenzentren ist Vorsicht geboten: Der Test k\u00f6nnte als Angriff erkannt werden.<\/strong><\/p>\n<h2 class=\"wp-block-heading\">Der Unterschied zum Browser<\/h2>\n<p><em>Oha<\/em> verh\u00e4lt sich nicht wie ein Webbrowser, der per HTTP-GET Anfrage die aufgerufene Adresse (zB \/ f\u00fcr das Wurzelverzeichnis) aufruft, das HTML parst &amp; alle dort referenzierten Ressourcen (CSS, JS, Bilder usw) nachl\u00e4dt. Sowie schlussendlich CSS &amp; JS ausf\u00fchrt, womit ggf. weitere Anfragen folgen &#8211; etwa durch Ajax. Stattdessen wird beim Benchmark nur die initiale Anfrage auf die angegebene URL ausgef\u00fchrt, ohne weitere Abh\u00e4ngigkeiten. Das ist kein grunds\u00e4tzliches Problem. Man sollte sich dem jedoch bewusst sein. Die Last bei echten Abfragen kann h\u00f6her sein, wenn z.B. per Ajax weitere dynamisch generierte Aufrufe folgen.<\/p>\n<p>Theoretisch k\u00f6nnte man X Browser-Instanzen und Fernsteuern, ein bekanntes Framework daf\u00fcr ist Selenium. Das macht jedoch wenig Sinn, weil es schnell an Grenzen st\u00f6\u00dft: Ein vollwertiger Browser verbraucht viele Ressourcen. Selbst auf leistungsstarker Hardware wird das Simulieren mit weniger als einer Hand voll Nutzern schnell scheitern. In aller Regel besteht daf\u00fcr keine Notwendigkeit. Die initiale Anfrage belegt am meisten Ressourcen. Ausnahmen bilden Single-Page-Anwendungen, die eine statische HTML-Seite ausliefern. Per JS rufen sie APIs auf, welche dynamisch generiert mehr Leistung ben\u00f6tigen. Wer das einsetzt, hat sich eine Komplexit\u00e4t geschaffen, die sich bis zu den Tests durchzieht &#8211; einfache Werkzeuge wie <em>Oha<\/em> sto\u00dfen dabei an ihre Grenzen.<\/p>\n<h2 class=\"wp-block-heading\">Wie viele parallele Prozesse?<\/h2>\n<p>Die Anzahl an gleichzeitigen Verbindungen sollte an die Konfiguration des Webservers angepasst werden: Anzahl der Arbeitsprozesse von Apache, PHP-FPM usw. Wie dies konkret aussieht, h\u00e4ngt vom eingesetzten Software-Stack ab. Wer beispielsweise PHP-FPM einsetzt, begrenzt die maximale Anzahl an Prozessen mit <code class=\"\" data-line=\"\">max_children<\/code>:<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-ini\" data-line=\"\">pm.max_children = 50<\/code><\/pre>\n<p>Erreichen mehr Anfragen den PHP-Server, muss dieser eine Warteschlange bilden. Folglich kommt es zu Verz\u00f6gerungen.<\/p>\n<p>Bei der Wahl f\u00fcr die Parameter -n (Gesamte Anzahl an Anfragen) und -c (Parallele Verbindungen) sollte die jeweilige Hardware ber\u00fccksichtigt werden. Insbesondere die Gesamtanzahl an Anfragen darf nicht zu niedrig gew\u00e4hlt werden: Kurze Tests liefern weniger aussagekr\u00e4ftige Ergebnisse, weil einzelne Ausrei\u00dfer viel st\u00e4rker ins Gewicht fallen. Statt den gesamten Anfragen daher besser die parallelen Verbindungen reduzieren. <\/p>\n<h2 class=\"wp-block-heading\">Durchf\u00fchrung der Messung<\/h2>\n<p>In diesem Szenario teste ich eine lokale Entwickler-Installation von U-News. Sie hat in ihrer docker-compose.yml sinnvolle Limits gesetzt bekommen, welche der produktiven Umgebung entsprechen. Da U-News bewusst sehr effizient entwickelt wurde, sind 100.000 Anfragen mit 100 parallelen Verbindungen sinnvoll. Der Test l\u00e4uft unter diesen Bedingungen auf einem AMD Ryzen 9 3900X mit RAM-Begrenzung auf 512 MB f\u00fcr Webserver &amp; PHP sowie 1 GB der Datenbank etwa 55 Sekunden lang.<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">~\/Downloads\/oha-linux-amd64 --latency-correction --no-pre-lookup -n 100k -c 50 http:\/\/localhost\/<\/code><\/pre>\n<p>Damit erreiche ich in der Testumgebung einen Durchsatz von etwa 1.600 &#8211; 1.800 Anfragen pro Sekunde. W\u00e4hrend die Messung l\u00e4uft, zeigt das linke Diagramm an, wie viele Anfragen in der vergangenen Zeit ausgef\u00fchrt werden konnten. Anfangs im Abstand von einer Sekunde, sp\u00e4ter erfolgt die Gruppierung in 10 Sekunden Bl\u00f6cken. Rechts daneben die Dauer der Anfragen. Daraus l\u00e4sst sich bereits ablesen, dass 100 Anfragen jeweils 4,5s gedauert haben &#8211; viel zu lang. Der Webserver ist also bereits \u00fcberlastet und musste Anfragen einreihen. Allerdings konnten sie trotzdem abgearbeitet werden, es kam zu keinen Fehlern. Oben links sind weitere Statistiken sichtbar, sie beziehen sich nur auf die letzten 10 Sekunden. Am Fortschrittsbalken ganz oben ist zu erkennen, wie viele der insgesamt durchzuf\u00fchrenden Anfragen bereits abgearbeitet sind.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2026\/03\/2026-03-02_22-17.avif\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"521\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2026\/03\/2026-03-02_22-17-1024x521.avif\" alt=\"\" class=\"wp-image-16721\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2026\/03\/2026-03-02_22-17-1024x521.avif 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2026\/03\/2026-03-02_22-17-300x153.avif 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2026\/03\/2026-03-02_22-17-768x390.avif 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2026\/03\/2026-03-02_22-17-1536x781.avif 1536w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2026\/03\/2026-03-02_22-17-640x325.avif 640w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2026\/03\/2026-03-02_22-17-334x170.avif 334w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2026\/03\/2026-03-02_22-17.avif 1904w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/div>\n<p>Nach Abschluss gibt <em>Oha<\/em> auf der Konsole einen Bericht aus: 100% Erfolgsrate best\u00e4tigt, dass keine Anfragen mit Fehlern abgebrochen worden sind. Interessant ist der Abstand zwischen schnellster &amp; langsamster Anfrage sowie der Durchschnitt. Wie bereits w\u00e4hrend des Tests ersichtlich, ben\u00f6tigte ein Teil der Anfragen deutlich l\u00e4nger. In welchem Umfang, zeigen die unteren Bereiche besser: 99% sind in 0,0926s oder weniger bearbeitet worden. Die Anfragen pro Sekunde sind eine Metrik, mit denen sich unter identischen Bedingungen gut vergleichen l\u00e4sst, ob etwas effizienter oder weniger effizient ist. Beispielsweise Caching aktivieren oder deaktivieren.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2026\/03\/2026-03-02_22-21.avif\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"732\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2026\/03\/2026-03-02_22-21-1024x732.avif\" alt=\"\" class=\"wp-image-16723\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2026\/03\/2026-03-02_22-21-1024x732.avif 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2026\/03\/2026-03-02_22-21-300x215.avif 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2026\/03\/2026-03-02_22-21-768x549.avif 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2026\/03\/2026-03-02_22-21-503x360.avif 503w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2026\/03\/2026-03-02_22-21-238x170.avif 238w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2026\/03\/2026-03-02_22-21.avif 1113w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/div>\n<h2 class=\"wp-block-heading\">Repr\u00e4sentative Ergebnisse mit mehr Messungen<\/h2>\n<p>Obwohl es sich um 100.000 Anfragen handelt, sollte man sich nicht auf lediglich einen einzelnen Durchlauf verlassen. Wer mehrere durchf\u00fchrt, wird Schwankungen feststellen. Keine all zu extremen, sie w\u00fcrden auf Probleme wie beispielsweise \u00e4u\u00dfere Einfl\u00fcsse hinweisen. Mein Test ergab eine Spannbreite von 1.600 Anfragen\/s bis \u00fcber 1.800 Anfragen pro Sekunde bei 10 Durchl\u00e4ufen, das ist normal und kann viele Ursachen haben. Ein klassisches Beispiel: Zwischenspeicher sind anfangs noch leer. Ich empfehle, den Durchschnitt aus f\u00fcnf Messungen zu berechnen. Mindestens drei sollten es sein.<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">Requests\/sec: 1634.1302\nRequests\/sec: 1785.7312 \nRequests\/sec: 1829.8046\nRequests\/sec: 1795.9245\nRequests\/sec: 1778.8379\nRequests\/sec: 1606.8775\nRequests\/sec: 1827.2906\nRequests\/sec: 1853.2960\nRequests\/sec: 1856.0149\nRequests\/sec: 1804.9129<\/code><\/pre>\n<p>Das muss nicht h\u00e4ndisch gemacht werden, sondern l\u00e4sst sich per Skript automatisch wiederholen:<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">for i in {1..5}; do\n  ~\/Downloads\/oha-linux-amd64 --latency-correction --no-pre-lookup -n 100k -c 50 http:\/\/localhost\/ | grep Requests\ndone\n  Requests\/sec:\t1836.0231\n  Requests\/sec:\t1484.0862\n  Requests\/sec:\t1557.1620\n  Requests\/sec:\t1494.4489\n  Requests\/sec:\t1513.5794<\/code><\/pre>\n<h2 class=\"wp-block-heading\">Automatisches Schreiben &amp; Auswerten der Ergebnisse<\/h2>\n<p>Praktisch hierf\u00fcr ist die Ausgabe als JSON mittels <code class=\"\" data-line=\"\">--output-format json<\/code> sowie optional das Schreiben aller Ergebnisse in eine Datei:<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">for i in {1..5}; do\n  ~\/Downloads\/oha-linux-amd64 --latency-correction --no-pre-lookup -n 10k -c 50 --output-format json -o benchmark_$i.json http:\/\/localhost\/\ndone<\/code><\/pre>\n<p>Das erzeugt die Dateien <code class=\"\" data-line=\"\">benchmark_1.json<\/code> bis 5 im aktuellen Ordner. Mit Werkzeugen wie <code class=\"\" data-line=\"\">jq<\/code> lassen sie sich parsen und gezielte Attribute abfragen, etwa die Anfragen pro Sekunde. Den Durchschnittswert rechnet uns awk aus:<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">jq -r &#039;.summary.requestsPerSec&#039; benchmark_*.json | awk &#039;{sum+=$1; count++} END {print sum\/count}&#039;\n2980.74<\/code><\/pre>\n<p>F\u00fcr jede Datei gibt <code class=\"\" data-line=\"\">jq<\/code> dessen Wert an Abfragen pro Sekunde aus:<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">jq &#039;.summary.requestsPerSec&#039; benchmark_*.json \n2968.0908715616397\n3004.999176128391\n5247.248777737877\n2343.4296619530724\n1339.9093700175113<\/code><\/pre>\n<p>Er wird in awk zur Variable <em>sum<\/em> hinzurechnet. Parallel z\u00e4hlt <em>count<\/em> die Anzahl der Zeilen. Schlussendlich die aufsummierte Anzahl an Anfragen durch die Zahl an Zeilen (und damit Dateien der Messdurchl\u00e4ufe) teilen &#8211; in diesem Falle sind das durchschnittlich rund 2981 Anfragen\/s.<\/p>\n<h2 class=\"wp-block-heading\">Optimierungen\/Konsequenzen<\/h2>\n<p>Hier handelt es sich bewusst um ein extremeres Beispiel, um die Grenzen auszutesten. Interessant ist, w\u00e4hrend des Tests die Auslastung des Servers zu beobachten: Der Flaschenhals ist mit einer Auslastung von bis zu 1.700% klar der Prozessor. Das liegt daran, weil hier aktuell noch ein simpler Apache2 mit mod_php (Prefork) eingesetzt wird. Er startet f\u00fcr jede Anfrage einen eigenen Prozess, der au\u00dferdem den PHP-Interpreter aufruft &#8211; das ist ineffizient. Mit PHP-FPM lie\u00dfe sich zumindest auf Ebene von PHP die Last deutlich reduzieren. Der Einsatz eines auf Events basierten Webserver wie Nginx statt Apache w\u00fcrde zudem das st\u00e4ndige starten von vollwertigen Prozessen vermeiden.<\/p>\n<p>In diesem Falle ist das bewusst in Kauf genommen. Die Seite verarbeitet zu Beginn weitaus weniger Anfragen. Au\u00dferdem wollte ich bewusst aufzeigen, wie weit man mit einem Standard-Apache + guten altem mod_php kommt: Damit l\u00e4sst sich bereits einiges realisieren. Selbst auf einem relativ leistungsschwachen Raspberry Pi.<\/p>\n<p>Je nach Ausgangslage &amp; Ziel kann man nun entscheiden, ob die Werte zufriedenstellend sind. Oder optimiert werden m\u00fcssen. Dabei geht es nicht zwingend um die Anzahl an Anfragen pro Sekunde, dies ist nur ein Beispiel. Daf\u00fcr w\u00e4ren nun Optimierungen des Codes oder Caching geeignete Mittel. Anschlie\u00dfend erneut messen, um Ver\u00e4nderungen zu erfassen.<\/p>\n<h2 class=\"wp-block-heading\">Wichtige Parameter f\u00fcr <em>Oha<\/em><\/h2>\n<ul class=\"wp-block-list\">\n<li><code class=\"\" data-line=\"\">-n XXXX<\/code> legt fest, wie viele Anfragen insgesamt gesendet werden, bevor der Test abgeschlossen ist. Praktischerweise lassen sich Suffixe wie &#8222;k&#8220; f\u00fcr tausend benutzen &#8211; 100k statt 100.000 anzugeben, ist k\u00fcrzer und verbessert die Lesbarkeit.<\/li>\n<li><code class=\"\" data-line=\"\">-c 100<\/code> gibt die Anzahl an parallelen Verbindungen an und legt damit fest, wie schnell die Gesamtzahl abgearbeitet wird.<\/li>\n<li><code class=\"\" data-line=\"\">--disable-keepalive<\/code> macht den Test realistischer, weil Keep-Alive Verbindungen wiederverwendet. Bei echten Besuchern funktioniert das nat\u00fcrlich nur begrenzt f\u00fcr nachgeladene Ressourcen, daher macht die Abschaltung Sinn. Allerdings kann man dadurch leicht an Limits sto\u00dfen, weil bei z.B. 100.000 Durchl\u00e4ufen eben 100.000 TCP-Verbindungen ge\u00f6ffnet werden.<\/li>\n<li><code class=\"\" data-line=\"\">--no-pre-lookup<\/code> verhindert, dass der \u00fcbergebene DNS nur einmalig aufgel\u00f6st wird. Auch hier ein zweischneidiges Schwert: Realistischer ist die Aufl\u00f6sung vor jedem Lauf (also den Schalter setzen). Allerdings flutet man dadurch den DNS-Server mit zig tausend Anfragen. Das ist unproblematisch, wenn es sich um einen lokalen im eignen Netzwerk handelt (z.B. vom Router).<\/li>\n<li><code class=\"\" data-line=\"\">--latency-correction<\/code> korrigiert Latenz-Messfehler.<\/li>\n<li><code class=\"\" data-line=\"\">--method POST<\/code> legt eine andere HTTP-Methode fest, GET ist Standard. Damit kann man etwa testen, wie viele \u00dcbermittlungen eines Formulars parallel m\u00f6glich sind. Daf\u00fcr sind ebenfalls <code class=\"\" data-line=\"\">-d &lt;body&gt;<\/code> oder <code class=\"\" data-line=\"\">-D &lt;body-datei-pfad&gt;<\/code> notwendig: Ersteres \u00fcbergibt den Body direkt, -D eine Datei, welche gesendet werden soll. Damit l\u00e4sst sich etwa ein Dateiupload simulieren. Mit <code class=\"\" data-line=\"\">--form &lt;werte&gt;<\/code> lassen sich HTML-Formulare \u00fcbermitteln, im Format <code class=\"\" data-line=\"\">--form name=Peter<\/code>.<\/li>\n<li><code class=\"\" data-line=\"\">-a &lt;basic-auth&gt;<\/code> authentifiziert die Anfrage per HTTP Basic Auth. Dies ist ein Base64 kodierter String im Format Benutzername:Passwort.<\/li>\n<li>Wer mehrere URLs aufrufen m\u00f6chte, kann sie in eine Datei schreiben und per <code class=\"\" data-line=\"\">--urls-from-file<\/code> den Pfad \u00fcbergeben. Dadurch ruft Oha alle Adressen auf.<\/li>\n<li><code class=\"\" data-line=\"\">--insecure<\/code> ignoriert ung\u00fcltige (z.B. selbst signierte) SSL-Zertifikate. N\u00fctzlich f\u00fcr lokale Testumgebungen.<\/li>\n<li>Wie von Curl bekannt, erlaubt <code class=\"\" data-line=\"\">-H &lt;header&gt;<\/code> die \u00dcbergabe eigener HTTP-Header. Wird man eher selten brauchen, kann im Einzelfall jedoch wichtig sein &#8211; etwa bei Single-Page-Webanwendungen, welche ein JWT voraussetzen.<\/li>\n<li>Statt die Ergebnisse auszugeben, lassen sie sich mit <code class=\"\" data-line=\"\">--output-format json -o benchmark.json<\/code> in eine JSON-Datei schreiben.<\/li>\n<\/ul>\n<h2 class=\"wp-block-heading\">Alternativen<\/h2>\n<p><em>Oha<\/em> ist ein Werkzeug mit grafischer Konsolen-Oberfl\u00e4che (TUI), um Lasttests durchzuf\u00fchren. Es existieren zahlreiche weitere, die im Kern das gleiche tun. Sie unterscheiden sich im Detail. Das \u00e4lteste mir bekannte ist <em>Apache Bench<\/em>, kurz ab.<sup data-fn=\"d9710093-82c9-4f94-98b8-e96d29f644a0\" class=\"fn\"><a href=\"#d9710093-82c9-4f94-98b8-e96d29f644a0\" id=\"d9710093-82c9-4f94-98b8-e96d29f644a0-link\">2<\/a><\/sup> Es wurde f\u00fcr Apache entwickelt, kann jedoch mit s\u00e4mtlichen Webservern genutzt werden. Wie <em>Oha<\/em> sendet es Anfragen nach dem HTTP-Standard. Viele Funktionen sind vorhanden, teils mit anderen Formaten. So kann Apache Bench zwar die Messergebnisse ebenfalls in eine Datei schreiben. Statt JSON werden CSV und Gnuplot unterst\u00fctzt.<\/p>\n<p>Wer eine grafische Desktop-Oberfl\u00e4che bevorzugt, ist JMeter.<sup data-fn=\"76849a74-fef0-4236-9d7e-41d0094c0dc4\" class=\"fn\"><a href=\"#76849a74-fef0-4236-9d7e-41d0094c0dc4\" id=\"76849a74-fef0-4236-9d7e-41d0094c0dc4-link\">3<\/a><\/sup> Es stammt ebenfalls von der Apache Software-Organisation und grenzt sich nicht nur optisch ab: Die Java-Anwendung ist f\u00fcr allgemeine Lasttests entwickelt worden. Neben HTTP funktioniert es f\u00fcr zahlreiche weitere Protokolle wie FTP, JDBC, LDAP, Mail und weiteren. Generell ist JMeter m\u00e4chtiger, beispielsweise beim ausf\u00fchrlicheren aufbereiten der Messwerte.<sup data-fn=\"d5278f0c-f35e-44e4-b122-202b6ff62cd8\" class=\"fn\"><a href=\"#d5278f0c-f35e-44e4-b122-202b6ff62cd8\" id=\"d5278f0c-f35e-44e4-b122-202b6ff62cd8-link\">4<\/a><\/sup><\/p>\n<h2 class=\"wp-block-heading\">Quellen<\/h2>\n<ol class=\"wp-block-footnotes\">\n<li id=\"c2a5b190-51a1-4969-b14f-29b3d51cc423\"><a href=\"https:\/\/github.com\/hatoo\/oha\/releases\" target=\"_blank\" rel=\"nofollow\">https:\/\/github.com\/hatoo\/oha\/releases<\/a> <a href=\"#c2a5b190-51a1-4969-b14f-29b3d51cc423-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 1 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"d9710093-82c9-4f94-98b8-e96d29f644a0\"><a href=\"https:\/\/httpd.apache.org\/docs\/2.4\/programs\/ab.html\" target=\"_blank\" rel=\"nofollow\">https:\/\/httpd.apache.org\/docs\/2.4\/programs\/ab.html<\/a> <a href=\"#d9710093-82c9-4f94-98b8-e96d29f644a0-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 2 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"76849a74-fef0-4236-9d7e-41d0094c0dc4\"><a href=\"https:\/\/jmeter.apache.org\/\" target=\"_blank\" rel=\"nofollow\">https:\/\/jmeter.apache.org\/<\/a> <a href=\"#76849a74-fef0-4236-9d7e-41d0094c0dc4-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 3 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"d5278f0c-f35e-44e4-b122-202b6ff62cd8\"><a href=\"https:\/\/jmeter.apache.org\/usermanual\/generating-dashboard.html\" target=\"_blank\" rel=\"nofollow\">https:\/\/jmeter.apache.org\/usermanual\/generating-dashboard.html<\/a> <a href=\"#d5278f0c-f35e-44e4-b122-202b6ff62cd8-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 4 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Wie viele Anfragen h\u00e4lt meine Webanwendung bzw. Webseite aus? Bleibt sie dabei stabil? Diese &amp; weitere Fragen lassen sich durch k\u00fcnstlich erzeugte Last kl\u00e4ren. In diesem Beitrag stelle ich das quelloffene Programm Oha vor: Es bietet eine Tui-Oberfl\u00e4che und kann die Messwerte exportieren. Dar\u00fcber hinaus gehe ich auf Aspekte ein, welche bei solchen Tests grunds\u00e4tzlich &#8230;<\/p>\n","protected":false},"author":5,"featured_media":16737,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":"[{\"content\":\"<a href=\\\"https:\/\/github.com\/hatoo\/oha\/releases\\\">https:\/\/github.com\/hatoo\/oha\/releases<\/a>\",\"id\":\"c2a5b190-51a1-4969-b14f-29b3d51cc423\"},{\"content\":\"<a href=\\\"https:\/\/httpd.apache.org\/docs\/2.4\/programs\/ab.html\\\">https:\/\/httpd.apache.org\/docs\/2.4\/programs\/ab.html<\/a>\",\"id\":\"d9710093-82c9-4f94-98b8-e96d29f644a0\"},{\"content\":\"<a href=\\\"https:\/\/jmeter.apache.org\/\\\">https:\/\/jmeter.apache.org\/<\/a>\",\"id\":\"76849a74-fef0-4236-9d7e-41d0094c0dc4\"},{\"content\":\"<a href=\\\"https:\/\/jmeter.apache.org\/usermanual\/generating-dashboard.html\\\">https:\/\/jmeter.apache.org\/usermanual\/generating-dashboard.html<\/a>\",\"id\":\"d5278f0c-f35e-44e4-b122-202b6ff62cd8\"}]"},"categories":[74],"tags":[937],"class_list":["post-16705","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-linux","tag-webserver"],"_links":{"self":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/16705","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/comments?post=16705"}],"version-history":[{"count":32,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/16705\/revisions"}],"predecessor-version":[{"id":16742,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/16705\/revisions\/16742"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media\/16737"}],"wp:attachment":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media?parent=16705"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/categories?post=16705"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/tags?post=16705"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}