1 Eine kurze Einführung in den SystemdurchsatzDer Durchsatz (die Druckbelastbarkeit) eines Systems hängt eng mit der CPU-Auslastung, den externen Schnittstellen, der E/A usw. der Anforderung zusammen. Je höher die CPU-Auslastung einer einzelnen Anforderung, desto langsamer sind die externe Systemschnittstelle und die IO-Auswirkungsgeschwindigkeit und desto geringer ist der Systemdurchsatz und umgekehrt. Mehrere wichtige Parameter des Systemdurchsatzes: TPS, Parallelität, Reaktionszeit
TPS = Parallelität/durchschnittliche Antwortzeit Wenn es sich bei der Transaktion hier um eine einzelne Schnittstellenanforderung handelt, können wir TPS auch als QPS betrachten.
Beispielsweise greifen 3.000 Benutzer (Parallelität) gleichzeitig auf die zu testende Schnittstelle zu. Laut Statistiken der Benutzerseite beträgt die durchschnittliche Antwortzeit für 3.000 Benutzer 1188,538 ms. Also TPS = 3000/1,188538 s = 2524,11 q/s. Wir können diesen Test wie folgt beschreiben: Bei 3000 gleichzeitigen Verbindungen beträgt der TPS 2524,11 und die durchschnittliche Antwortzeit 1188,538 ms
Der Durchsatz eines Systems wird normalerweise durch zwei Faktoren bestimmt: TPS und Parallelität. Jedes System hat eine relative Grenze für diese beiden Werte. Unter dem Zugriffsdruck des Anwendungsszenarios wird der Durchsatz des Systems nicht erhöht, solange ein Element den Maximalwert des Systems erreicht. Wenn der Druck weiter zunimmt, wird der Durchsatz des Systems stattdessen verringert. Der Grund dafür ist, dass das System überlastet ist und anderer Verbrauch wie Kontextwechsel und Speicher zu einem Rückgang der Systemleistung führt. Die tatsächliche Leistung besteht darin, dass TPS zuerst zunimmt und dann abnimmt. Wir müssen den Wendepunkt der Leistung finden. Und beseitigen Sie den begrenzenden Engpass. 2 TestmethodenReferenzen (detaillierte Ausgabebeschreibung): https://www.jb51.net/article/231492.htm 2.1 Client-TesttoolsZum Testen verwenden wir das Tool ApacheBench. Ubuntu installiert ab: sudo apt-get installiere apache2-utils Der Standard-Anmeldeport in Linux kann nur 1024 Dateien öffnen. Da in Linux alles eine Datei ist, ist die Anzahl der gleichzeitigen AB-Verwendung durch die Anzahl der geöffneten Dateien begrenzt. Um eine größere gleichzeitige Verwendung zu unterstützen, muss dies mit ulimit -n 10000 (Anzahl der geöffneten Dateien) geändert werden. Ich habe es getestet und auf 15.000 geändert. 2.1.1 GET-Methodeab -n 100 -c 100 https://www.baidu.com/index.html -n: Gesamtzahl der Anfragen -c: Anzahl gleichzeitiger Benutzer. -url: Zu testende API. Bei einer geringen Anzahl an Testanfragen wird der Test schnell abgeschlossen und es werden keine Zwischenprozesse angezeigt. Bei einer großen Anzahl an Anfragen wird die aktuelle Anzahl der abgeschlossenen Anfragen in einer eigenen Zeile angezeigt. 2.1.2 POST-Methodeab -n 10 -c 1 -T 'application/x-www-form-urlencoded' -H "Authorization:Bearer 2393d8db9b9d7f4b9d1570cc8776bca69b421b62" -p ./post http://172.28.28.17:3017/oauth2/token
2.1.3 Interpretation der TestergebnisseHier ist die Testausgabe von ab: ab -n 10 -c 2 Die obige Abbildung zeigt das Ergebnis einer Gesamtanforderung von 10 und einer Parallelität von 2. Für uns sind vor allem die folgenden Ausgabeinformationen von Interesse:
Darunter sind für uns die Anfragen pro Sekunde (tps) am wichtigsten. Wir betrachten es als den wichtigsten Indikator für die Serverleistung. 2.2 Serverseitige ErkennungsmethodeSie können den Befehl iftop und nethogs -d verwenden, um den Netzwerkstatus des Servers zu ermitteln. Sie können den Server-Portverkehr über den Befehl iptables überwachen. Sie können top | grep "node" verwenden, um den Speicher und die CPU zu beurteilen. Für Cloud-Tests können Sie das Cloud-Host-Backend verwenden, aber die Hintergrundparameter sind Durchschnittswerte nach Minuten. Dies scheint eine dumme Art zu sein, Leistung zu messen. 3 Tatsächlicher TestMit ApacheBench können Sie Shell-Skripte schreiben, um mehrere Tests durchzuführen. Sie können die zu testende API in das API-Array einfügen und die Anzahl der Schleifen ändern, um mehrere APIs gleichzeitig zu testen und eine XLS-Datei mit Schlüsselparametern zu generieren. Nun scheint es, als wäre ich zu naiv gewesen, auf eine solche Idee zu kommen. 3.1 Shell-SkriptGebrauchsanweisung: a ist die Gesamtzahl der Anfragen, b ist die Anzahl der gleichzeitigen Benutzer, d. h. a[0] entspricht b[0]. Der erste übergebene Parameter ist die Adresse des zu testenden API-Servers und der zweite die von der API benötigten Parameter. Die API wird im API-Array festgelegt. Um mehrere APIs hinzuzufügen oder mehreren Sätzen von API-Tests zuzustimmen, ändern Sie bitte die Anzahl der Schleifen. echo "Sie können dieses sh wie folgt verwenden:"$0" serverIP userParam" a=(1000 2000 4000 6000 7000)#Gesamtzahl der zu testenden Anfragen b=(50 100 200 300 400)#Anzahl gleichzeitiger Benutzer runTime=$(date +%Y%m%d%H%M%S) wenn [ -z "$1"] Dann serverip="http://127.0.0.1" anders ServerIP = $1 fi wenn [ -z "$2"] Dann param="Geräte-ID=XXX&Bindungsplattform=XXX&Bindungs-ID=XXX" anders Parameter=$2 fi Dateiname=${runTime}"-test.log" Touch-Dateiname #api=('XXX'${param} 'XXX'${param} '/Benutzer/Konto') api=('XXX'${param}) echo "********Webserver-Testinfo****************" echo "Testzeit :"$(Datum) echo "LogName :"${Dateiname} echo "Server-IP:"${Server-IP} echo "Benutzerparam:"${param} echo "********Webserver-Testinfo****************" #echo ${Dateiname} für j in {0..0}#Die Anzahl der zu testenden APIs ist die Anzahl der API-Arrays echo "API-Test:"${serverip}${api[j]} für i in {0..4}#Die Anzahl der zu testenden API-Tests beträgt 5, was bedeutet, dass das entsprechende ab-Array fünf Werte hat ab -r -k -n ${a[i]} -c ${b[i]} -C ${param} ${serverip}${api[j]} | grep -e"Dokumentpfad:" -e "Abgeschlossene Anfragen:" -e "Parallelitätsstufe:" -e"Fehlgeschlagene Anfragen:" -e"Für Tests benötigte Zeit:" -e "Anfragen pro Sekunde:" -e "Zeit pro Anfrage" -e"Insgesamt übertragen: " >> ${filename} Erledigt Erledigt sed -i 's/^.\{24\}//g' ${filename}# Erstellt eine txt-Datei entsprechend der Zeit und extrahiert sie entsprechend den obigen Parametern. exportiere LD_LIBRARY_PATH= ./change ${filename} ${runTime}"report.xls"#chang Die Funktion dient zum Konvertieren der Schlüsseldaten in txt in eine xls-Datei. rm ${Dateiname} 3.2 C++ Extractor: Verwenden von libxl.h#include <iostream> #einschließen <fstream> #include <Zeichenfolge> #include "libxl.h" Namespace std verwenden; Namespace libxl wird verwendet; int main(int agrc, char *argc[]) { //cout << "hallowelt" << endl; fstream f; ifstream ifile(argc[1]); Zeichenfolgentemperatur; : i = 0, j = 1, k = 0; Book* book = xlCreateBook();//Erstellen Sie eine Instanz von XLS (Execl97-03) im Binärformat. Sie müssen diese Funktion aufrufen, um ein Objekt zum Ausführen von Excel zu erstellen, bevor Sie es verwenden. //book->setKey(......);//Wenn Sie die Bibliothek gekauft haben, legen Sie den entsprechenden Schlüssel fest. Wenn Sie sie nicht gekauft haben, verwenden Sie diese Zeile nicht if (book)//Ob die Instanz erfolgreich erstellt wurde { Sheet* sheet = book->addSheet("Sheet1"); //Arbeitsblatt hinzufügen für (i = 0; i < 30; i++) { für(j=0;j<10;j++){ sheet->setCol(i, j, 20); //Spaltenbreite, Format usw. festlegen } } ich = 0; j = 1; wenn (Blatt) { sheet->writeStr(j, 0, "API"); sheet->writeStr(j, 1, "Parallelitätsstufe"); sheet->writeStr(j, 2, "Für Tests benötigte Zeit"); sheet->writeStr(j, 3, "Anfragen abschließen"); sheet->writeStr(j, 4, "Fehlgeschlagene Anfragen"); sheet->writeStr(j, 5, "Insgesamt übertragen"); sheet->writeStr(j, 6, "Anfragen pro Sekunde"); sheet->writeStr(j, 7, "Zeit pro Anfrage (Benutzer)"); sheet->writeStr(j, 8, "Zeit pro Anfrage (Server)"); } während (getline(ifile, temp)) { wenn (temp[0] == '/'){ f << temp << " "; Blatt->writeStr(j, i, temp.c_str()); } sonst wenn (temp.find('[') != string::npos){ f << temp.substr(0, temp.find('[') - 1) << " "; Blatt->writeStr(j, i, temp.substr(0, temp.find('[') - 1).c_str()); } sonst wenn (temp.find('b') != string::npos){ f << temp.substr(0, temp.find('b') - 1) << " "; Blatt->writeStr(j, i, temp.substr(0, temp.find('b') - 1).c_str()); } sonst wenn (temp.find('s') != string::npos){ Blatt->writeStr(j, i, temp.substr(0, temp.find('s') - 1).c_str()); f << temp.substr(0, temp.find('s') - 1) << " "; } anders{ Blatt->writeStr(j, i, temp.c_str()); f << temp << " "; } ich++; wenn (i == 9){ f << " " << endl; ich = 0; } } } ifile.schließen(); } if (book->save(argc[2])) //In example.xls speichern { //..... } anders { std::cout << Buch->Fehlermeldung() << std::endl; } Buch->Veröffentlichung();} gebe 0 zurück; } 4 Einige Probleme beim TestenBei der Nutzung eines Cloud-Hosts sollten Sie auf die Bandbreite des Cloud-Hosts achten. Kleine Leitungen können zum Engpass werden. Es besteht eine Diskrepanz zwischen dem insgesamt übertragenen Datenverkehr und dem Port-Datenverkehr in der AB-Software. Der Portverkehr ist größer als die Gesamtübertragungsmenge und es wird vermutet, dass ein Paketblockierungsfaktor vorliegt. Daher kann die Gesamtsumme der übertragenen Daten nicht als vom Server verbrauchter Datenverkehr behandelt und zur Berechnung bestimmter Dienste in der Cloud verwendet werden, die Datenverkehr verbrauchen. git: https://github.com/CollapsarLi/server_apachebench_shell.git Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird. Das könnte Sie auch interessieren:
|
<<: Implementierung einer kreisförmigen CSS-Aushöhlung (Gutschein-Hintergrundbild)
>>: Detaillierte Zusammenfassung häufig verwendeter MySQL-Funktionen
In diesem Artikelbeispiel wird der spezifische Co...
Vorwort Der SQL-Modus wirkt sich auf die von MySQ...
Als ich kürzlich lernte, wie man webpack verwende...
Jeden Tag ein jQuery-Plugin - jQuery-Plugin zur I...
Wenn ein Index die Werte aller abzufragenden Feld...
Inhaltsverzeichnis TOKEN Timer-Aktualisierung 2. ...
Apache Superset ist ein leistungsstarkes BI-Tool,...
<br />Es ist nicht länger als zwei Jahre her...
Inhaltsverzeichnis Umfeld: 1. Docker ermöglicht d...
Inhaltsverzeichnis 1. Was ist Pinia? 2. Pinia ist...
Da die Plattform weiter wächst, ist die Forschung...
Hintergrund: Ich habe bereits ein Projekt durchge...
1. ROW_NUMBER() Definition: Die Funktion ROW_NUMB...
1. Download-Adresse: http://dev.mysql.com/downloa...
Vorwort Wir wissen bereits, dass MySQL den SQL-Be...