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.