Folgen wir hier dem Szenario, schließlich ist das Szenario der beste Weg, die Praktikabilität zu erleben. Lassen Sie uns zunächst über die Serverkonfiguration und -umgebung sprechen
Alibaba Cloud ECS Cloud-Host, 8G Speicher, 4-Kern-CPU, 20 MB Bandbreite, 20 G Systemfestplatte + 200 G Datenfestplatte, CentOS6.564 Bit, installierte integrierte LNMP-Umgebung
Szenario: WeChat sendet rote Umschläge
Dieses Szenario kommt sehr häufig vor. Im Allgemeinen senden Kunden stündlich eine Werbung vom offiziellen WeChat-Konto auf rund 5.000. Apropos, dies gilt eigentlich nicht als hohe Parallelität, aber der Server stürzte trotzdem ab und es dauerte etwa 5 Minuten, bis er wieder normal war. Das ist etwas unangemessen. Lassen Sie uns die Gründe analysieren. Die CPU-Auslastung ist nicht hoch und die Speichernutzung ist normal. Im Alibaba Cloud-Kontrollfeld ist der Netzwerkausgangsverkehr voll. Es scheint, dass das Problem durch Netzwerkgründe verursacht wird.
Zuerst habe ich die statischen Ressourcen überprüft und festgestellt, dass die meisten Bilder nicht optimiert waren, also habe ich sie entfernt und eine verlustfreie Komprimierung durchgeführt. Nach dem Absenden sind sie immer noch abgestürzt und der Server zeigte häufig 502 an.
Überprüfen Sie die statischen Ressourcen CSS und JS der Seite erneut und ersetzen Sie die häufig verwendete JS-Bibliothek durch CDN, um die Anzahl der Anfragen zu reduzieren. Nach der Übermittlung gibt es immer noch keine großen Änderungen und der 502 bleibt gleich .
Überprüfen Sie also die Anzahl der Nginx-Verbindungen und verwenden Sie den Befehl
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
Das Ergebnis zeigt
TIME_WAIT 3828SYN_SENT 1FIN_WAIT1 107FIN_WAIT2 27ESTABLISHED 661SYN_RECV 23CLOSING 15LAST_ACK 284
Guter Junge, TIME_WAITE ist sehr hoch. Sprechen Sie hier unbedingt über die Bedeutung von TIME_WAITE: TIME_WAIT: Auf der anderen Seite wurde eine Veröffentlichung initialisiert. Was bedeutet das? Dies bedeutet, dass der Server aktiv heruntergefahren wurde und auf eine Antwort vom Client wartet. Wenn der Client nicht antwortet, wartet er und dieser Wert erhöht sich. Offensichtlich müssen wir zu diesem Zeitpunkt den Wert von TIME_WAIT reduzieren.
Hier müssen Sie nur einige Parameter von sysctl.conf ändern und prüfen, ob
eine solche Einstellung ist. Checken Sie die Datei ein. Fügen Sie sie einfach am Ende hinzu. Führen Sie nach dem Speichern die Konfiguration
/sbin/sysctl -p
aus, damit sie wirksam wird.
Überprüfen Sie weiterhin die Anzahl der Nginx-Verbindungen nach 20 Minuten. Das Ergebnis ist
TIME_WAIT 87SYN_SENT 1FIN_WAIT1 60FIN_WAIT2 19ESTABLISHED 477SYN_RECV 12CLOSING 2LAST_ACK 100
und es ist wieder normal, und auch die Netzwerkbandbreite ist gesunken .
Aber die guten Zeiten hielten nicht lange an, als ich in der zweiten Stunde anfing, mir rote Umschläge zu schnappen, tauchte wieder 502 auf. Bei der Überprüfung des Prozesses wurde festgestellt, dass die CPU-Auslastung von mysqld sehr hoch war, was dazu führte, dass die CPU vollständig ausgelastet war und der Server abstürzte. Ändern Sie die MySQL-Konfigurationsdatei und passen Sie max_connection auf 30000 an. Andere damit verbundene Parameter wurden angepasst und optimiert, die Situation wurde entschärft, aber innerhalb weniger Minuten war die CPU wieder voll ausgelastet.
Seltsam! Also habe ich den Prozess in MySQL überprüft und festgestellt, dass es häufig SQL-Abfragen gab und das Datenvolumen der mehreren abgefragten Tabellen etwa 100.000 betrug. Es wurde festgestellt, dass dies daran lag, dass kein Index festgelegt war. Nach Rücksprache mit der Backend-Entwicklung stellte sich heraus, dass nur der Primärschlüssel festgelegt war. Ändern Sie es sofort. Fünf Minuten nach dem Absenden sank die CPU-Leistung und stabilisierte sich bei etwa 10 %, und 502 wurde nicht mehr angezeigt.
Das obige ist der detaillierte Inhalt vonSo lösen Sie einige häufige Probleme, die durch den Umgang mit hoher Parallelität bei der Serverwartung verursacht werden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!