2017-05-29 3 views
0

Ich muss einen Server über eine Liste von 100k Post-Requests pro Tag stresstesten. Jede Anfrage muss zu einem gegebenen festen Zeitstempel beginnen. Der kleinste Zeitunterschied zwischen zwei Anfragen beträgt etwa 100 ms.Stresstest-Server: Anfragen zu bestimmten Zeitpunkten starten

Beispiel:

12:08:38.971 url1 
12:08:39.429 url2 
12:08:40.186 url3 
12:08:40.444 url4 
... 

Ich werde Perl oder C verwenden, um den Stresstest zu implementieren. Anforderungen werden mit "curl" ausgeführt, Threading wird verwendet, da Antworten typischerweise länger als 100 ms sind.

Mein Problem ist es, eine Art von Warteschlange zu füllen, die die Anfragen zu den angegebenen festen Zeiten aus der Liste startet.

Meine erste Idee ist es, eine while-Schleife (zB für einzelne Anforderung) zu verwenden und dauerhaft die Zeitstempel überprüfen:

#include <stdio.h> 
    #include <sys/time.h> 

    struct timeval time; 

    int t_sec=1496064929; 
    int t_usec=100; 
    int request_started=0; 

    int main(){ 

    while(1){ 

     gettimeofday(&time, NULL); 

     if(time.tv_sec == t_sec && time.tv_usec > t_usec && request_started == 0){ 
     printf("Request start at %d %d\n", time.tv_sec, time.tv_usec); 
     request_started=1; 
     } 
    } 
    } 

Aber dieser Code ist bei weitem nicht ideal ... Gibt es irgendeine Art von Scheduler-Bibliothek welche Anfragen im Subsekundenbereich bearbeiten können? Oder vielleicht, gibt es bereit, Benchmark-Tools zu verwenden, die solche Anfragen aus der gegebenen Liste erzeugen können (ich habe Apache-Benchmark, httperf und Belagerung bereits ohne Glück überprüft)?

Vielen Dank im Voraus!

+0

Ist es zwingend erforderlich, Anfrage nur zu einem bestimmten Zeitstempel zu senden, oder Sie wollen im Grunde einen Server mit 100k Anfragen betonen genug Zeit zwischen zwei aufeinander folgenden Anfrage zu gewährleisten, zwei Anfragen nicht am selben Sockel – Pras

+0

Leider Software-Empfehlungen sind Off-Topic auf Stack Overflow. Du könntest aber vielleicht etwas schreiben, das Crond oder etwas ähnliches verwendet. Du könntest ein Programm schreiben, das deine Datei in eine crontab konvertiert (obwohl ich nicht sicher bin, ob crontab Mikrotips erlaubt, vielleicht mit einem Addon). – simbabque

+0

Ja, es ist zwingend erforderlich, die Anfragen zu bestimmten Zeitstempeln zu senden. Unser Kunde liefert die Liste mit den Zeitstempeln und den Nachfragen. Die Liste soll die Anzahl der Anfragen über den Tag hinweg wiedergeben. Viele Anfragen zu Arbeitszeiten - nur einige Anfragen in der Nacht. – MPH

Antwort

0

Sie können Ihren Stress-Client codieren, indem Sie vor dem Senden jeder Anfrage eine entsprechende Verzögerung hinzufügen. Bitte beachten Sie, dass die Berechnungen zum Senden von Anforderungen, die einen Stresstest emulieren, subjektiv auf Netzwerkverzögerung, Systemressourcen (CPU, Speicher), Priorität des Client- und Serverprogramms bei deren Ausführung sind.

Sie haben 100k gesendet werden über 24 Stunden (vorausgesetzt, Sie meinen 24 Stunden für einen Tag), so im Grunde müssen Sie Verzögerung von 1158 ms zwischen zwei aufeinanderfolgenden Anfragen gesendet werden. Sie müssen die Zeit für jede Anfrage in der Schleife durch Subtrahieren Zeitstempel vor dem Senden der Anfrage aus dem Zeitstempel nach Erhalt der Antwort Zeit Nehmen wir an, es dauerte x msec für eine Anforderung verarbeitet werden, wenn x weniger als 1158msec, Schlaf für (1158 - x) ms vor dem Senden der nächsten Anfrage, andernfalls senden Sie einfach die nächste Anfrage mit einer Verzögerung.

Wenn Sie es mit mehreren Prozessen oder Threads ausführen, müssen Sie dies in Ihre Berechnung einbeziehen, da jeder Thread/Prozess 100k/n Anfragen in 24 Stunden senden soll, wobei n die Anzahl der Threads oder Prozesse ist.

Verwandte Themen