5 Stimmen

Ist dies ein schlechter Weg, um Serverlasttests durchzuführen?

Ich arbeite an einem PHP-MySQL Webanwendung, und die verfügbaren Tools für Serverlasttests sind umständlich und verwirrend. Also dachte ich, ich würde dies versuchen, und ich würde gerne wissen, ob es eine schlechte Idee ist:

  • Hinzufügen der Seitenerstellungszeit und memory_get_usage() für die Ausgabe jeder Seite
  • Verwendung von jQuery, AJAX und setInterval um die Seite n-mal pro Sekunde aufzurufen und den Zeit-/Speicherverbrauch aufzuzeichnen.

Hier ist das Javascript und Markup:

<script>
function roundNumber(num, dec) {
    var result = Math.round(num*Math.pow(10,dec))/Math.pow(10,dec);
    return result;
}

$(function(){

totalCount = 0;
i = 1;
totalTime = 0;
highest = 0;
memoryUsage = 0;

var hitsPerSecond = 1000;
var totalLimit = 100;

function testLoad(){

    if (totalCount <= totalLimit){

        $.get('/lp/user-page.php', function(data){
            $(data).filter('#page-generation-time').each(function(){
                totalTime += parseFloat($(this).text());
                $('.console').append('<p>('+i+') - Load time: '+$(this).text()+'</p>');
                            i++;
                            if (highest < $(this).text()){
                                highest = $(this).text();
                            }
                            $('.average').html('Average: '+roundNumber(totalTime/i, 5)+' - Highest: '+highest);
            });
            $(data).filter('#page-memory-usage').each(function(){
                memoryUsage = parseFloat($(this).text());
                $('.memory').html($(this).text());
            });

        });

    } else {
        clearInterval(testLoadInterval);
    }

    totalCount++;

};

var testLoadInterval = setInterval(function(){ testLoad(); }, 1000/hitsPerSecond);

});

</script>

<h2>Load Test</h2>
<div class="average"></div>
<div class="memory"></div>
<div class="console-container">
    <div class="console"></div>
</div>

Ist dies eine unglaublich dumme/ungenaue Art, Lasttests durchzuführen? Weil es scheint, wie es seine Vorteile hat:

  • Leichtgewichtig und einfach zu implementieren.
  • Lädt die gesamte Seite mit einem echten Browser.
  • Verfolgt die durchschnittliche Seitenladezeit und zeichnet die Ergebnisse direkt im Browser auf.

Aber ich habe wirklich keinen Bezugsrahmen, um zu wissen, ob die Zahlen, die ich bekomme, richtig sind. Vielen Dank an alle, die mir sagen können, wenn ich völlig falsch bin, und wenn es etwas etwas mehr benutzerfreundlich da draußen als jMeter.

UPDATE

Verwenden Sie dies nicht als Methode zum Testen der Serverlast. Sie wird Ihnen keine genauen Ergebnisse liefern.

Mit dem obigen Code war ich in der Lage, den Server mit "1.000" Ladungen pro Sekunde ohne große Probleme zu belasten. Nachdem ich dasselbe mit ApacheBench versucht hatte, stellte ich fest, dass dies in keiner Weise der Realität entsprach.

Mit ApacheBench konnte ich den Server zum Absturz bringen, indem ich die Anwendung mit 40 (!) gleichzeitigen Verbindungen belastete.

Natürlich schreibe ich Teile der Anwendung um, um gecachetes HTML zu verwenden, wo immer dies möglich ist.

Um also meine eigene Frage zu beantworten, ja ist dies ein schlechter Weg, einen Server zu testen.

6voto

William King Punkte 1120

Das ist nicht die schlechteste Idee, aber es gibt einige Probleme damit, wie in den Kommentaren erwähnt.

Ein Problem, das Sie definitiv haben werden, ist das Caching. Vergewissern Sie sich einfach, dass der Cache in dem von Ihnen verwendeten Browser ausgeschaltet ist. Hinweis: Ich hatte einige Probleme damit, dass der Chrome-Cache deaktiviert war und Chrome trotzdem darauf bestand, gecachte Inhalte zu liefern.

Abgesehen von der Zwischenspeicherung ist dies nicht die genaueste Methode, um etwas zu tun. Auch wenn es eine echte Browserlast simuliert, wird nur eine Verbindung simuliert. Dies emuliert im Wesentlichen einen Benutzer, der diese einzelne Seite mehrmals aufruft, was nicht sehr genau ist.

Ich würde auf jeden Fall Apache Bench verwenden, allein schon wegen der gleichzeitigen Verbindungen. Etwas wie

ab -n 1000 -c 10 http://www.your_url.com/

Ändern Sie diese Zahlen je nach Ihrem Server. In diesem Beispiel würden 1000 Anfragen 10 auf einmal ausgeführt.

Eine Sache, die Sie tun könnten, wenn Sie die "Genauigkeit" der Zahlen von Ihrem Javascript-Benchmark überprüfen wollten, ist Apache Bench laufen zu lassen und einige Basislinie ohne Browser Zahlenschätzungen zu erhalten und dann Ihr Benchmark-Skript laufen zu lassen und zu sehen, wie nah die Ergebnisse sind.

Ein weiteres großartiges Instrument ist Belagerung . Es ist nicht sehr schwierig zu installieren und lohnt sich, wenn Sie die Leistung wirklich genau testen wollen. Aber wenn Sie etwas sehr Benutzerfreundliches suchen, ist es vielleicht nicht das Richtige für Sie.

Ein weiteres mögliches Tool mit einer ansprechenden Benutzeroberfläche ist Karl

Es ist nicht wirklich für Lasttests konzipiert, aber es hat eine Funktion, mit der Sie wiederholte gleichzeitige Anfragen ausführen können (ähnlich wie Apache Bench) und es hat eine hübsche Oberfläche.

Es gibt noch viele weitere Optionen, aber sie sind vielleicht nicht benutzerfreundlich genug für Sie, so dass ich nicht weiter ins Detail gehen werde

Eine gute kostenpflichtige Option (sie bieten Ihnen einige Testläufe an, bevor sie Ihnen etwas berechnen), die ich in der Vergangenheit genutzt habe, ist LoadImpact

Es ist zwar etwas teuer, wenn Sie wirklich anspruchsvolle Tests durchführen wollen, aber es simuliert gleichzeitige Browser-Loads und ermöglicht es Ihnen, einen "Pfad" für die simulierten Benutzer zu skripten, um durch Ihre Website ziemlich einfach zu nehmen. Wenn Sie auf der Suche nach einer sehr benutzerfreundlichen Lösung mit relativ hoher Genauigkeit sind, würde ich sie auf jeden Fall empfehlen (wenn Sie das Geld haben).

Eine weitere mögliche kostenpflichtige Lösung ist CapCal

Ich weiß allerdings nicht wirklich viel über sie. Sieht so aus, als ob sie auch eine Art kostenlose Testversion anbieten würden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X