


So beheben Sie HTTP 500: Interner Serverfehler mit PHP+Redis in tatsächlichen Projekten
Die Anzahl der Benutzer ist schnell gewachsen und die Anzahl der Besuche hat sich in kurzer Zeit verdoppelt. Aufgrund der guten frühen Kapazitätsplanung können die Hardwareressourcen dies unterstützen, es gibt jedoch ein großes Problem im Softwaresystem : 40 % der Anfragen geben HTTP 500 zurück: Interner Serverfehler
Problembeschreibung
Die Anzahl der Benutzer ist schnell gewachsen und die Anzahl der Besuche hat sich in kurzer Zeit verdoppelt Aufgrund der guten frühzeitigen Kapazitätsplanung können die Hardware-Ressourcen dies unterstützen, aber das Software-System ergab ein großes Problem:
40 % der Anfragen geben HTTP 500 zurück: Interner Serverfehler
Bei Betrachtung der Protokolle Es wurde festgestellt, dass der Fehler in der Verbindungsverarbeitung von PHP <-> lag Die Grundursache wurde zu Beginn nicht gefunden, daher konnten wir nur verschiedene fehlerbezogene Methoden ausprobieren, wie zum Beispiel:
PHP-Verbindungsnummer hinzufügen und das Timeout von 500 ms auf 2,5 s erhöhendeaktivieren Sie default_socket_timeout in den PHP-EinstellungenSYN-Cookies im Hostsystem deaktivieren
Erhöhen Sie den Puffer des HostsystemsAnpassen Sie die Anzahl der TCP-Rückstände
...
Viele Methoden ausprobiert, aber alle sind wirkungslos
Beim zweiten Mal
Ich möchte vorinstallieren. Ich habe versucht, dieses Problem in der Release-Umgebung zu reproduzieren, aber leider ist es so Immer noch fehlgeschlagen. Es sollte daran liegen, dass der Datenverkehr nicht groß genug ist, um
Das dritte Mal
zu reproduzieren. Könnte es sein, dass Redis im Code nicht geschlossen ist? Normalerweise schließt PHP die Ressourcenverbindung am Ende der Ausführung automatisch, in älteren Versionen kommt es jedoch zu Speicherlecks. Um auf der sicheren Seite zu sein, ändern Sie den Code und schließen Sie die Verbindung manuell. Das Ergebnis ist immer noch ungültig
Das vierte MalVerdächtiges Ziel: PHPREDIS-Client-Bibliothek
Führen Sie A/B-Tests durch, ersetzen Sie die PREDIS-Bibliothek und stellen Sie sie für 20 % der Benutzer bereit das Rechenzentrum
Dank der guten Codestruktur wurden die Austauscharbeiten schnell abgeschlossen
Das Ergebnis ist zwar immer noch ungültig, aber es gibt auch eine gute Seite, die beweisen kann, dass phpredis in Ordnung ist
Das 5. Mal
Ich habe die Version von Redis überprüft und es war Version 2.8.9.
Versuchen Sie, Redis zu aktualisieren Aktualisieren.
Es ist in Ordnung. Das ist nicht praktisch.
Das 6. MalBeim Durchsuchen vieler Dokumente habe ich festgestellt Eine gute Debugging-Methode in den offiziellen Dokumenten: Redis Software Watchdog, öffnen Sie es und führen Sie Folgendes aus:
$ redis-cli --latency -p 6380 -h 1.2.3.4 min: 0, max: 463, avg: 2.03 (19443 samples)
Sehen Sie sich das Redis-Protokoll an:
... [20398] 22 May 09:20:55.351 * 10000 changes in 60 seconds. Saving... [20398] 22 May 09:20:55.759 * Background saving started by pid 41941 [41941] 22 May 09:22:48.197 * DB saved on disk [20398] 22 May 09:22:49.321 * Background saving terminated with success [20398] 22 May 09:25:23.299 * 10000 changes in 60 seconds. Saving... [20398] 22 May 09:25:23.644 * Background saving started by pid 42027 ...
Das Problem wurde gefunden:
jedes Es dauert nur ein paar Minuten, um Daten auf der Festplatte zu speichern. Warum dauert es etwa 400 ms, einen Hintergrundspeicher zu forken (Sie können es sehen). (die Zeit des ersten und zweiten Protokolls oben) Hier habe ich endlich die Ursache des Problems gefunden. Da in der Redis-Instanz eine große Datenmenge vorhanden ist, ist es sehr zeitaufwändig, den Hintergrund zu forken Prozess für jeden Persistenzvorgang, und die Schlüssel werden in ihrem Geschäft häufig geändert, was zu häufigen Persistenzauslösern führt, was häufig zu Problemen mit der Redis-Blockierung führt Lösung: Verwenden Sie einen separaten Slave für die Persistenz Dieser Slave verarbeitet keine echten Verkehrsanfragen. Seine einzige Funktion besteht darin, die Persistenz zu verwalten und Persistenzoperationen für die vorherige Redis-Instanz durchzuführen.
Der Effekt ist sehr offensichtlich und das Problem ist grundsätzlich gelöst Manchmal werden immer noch Fehler gemeldet
Das 8. Mal
Lösung: Proxy einführen Sie haben sich für den Twemproxy von Twitter entschieden, der nur zu jedem Webserver hinzugefügt werden muss. Bei der Installation eines Proxys auf dem Computer ist Twemproxy für dauerhafte Verbindungen mit Redis-Instanzen verantwortlich, was die Reduzierung erheblich verringert Verbindungsvorgänge.
Twemproxy verfügt außerdem über zwei praktische Funktionen:
Unterstützt Memcached
Kann blockiert werden. Sehr zeitaufwändige oder gefährliche Befehle wie Tasten, FlushallDer Effekt ist natürlich perfekt, und Sie müssen sich keine Sorgen mehr über frühere Verbindungsfehler machen
Das 9. Maldurch Daten-Sharding Lassen Sie uns mit der Optimierung fortfahren:
Daten aufteilen und isolieren verschiedene Kontexte
Konsistentes Hash-Sharding für Daten im selben Kontext durchführen
Reduzieren Sie die Anzahl der Anforderungen auf jeder Maschine. Die Anforderung und das Laden
verbessert die Zuverlässigkeit des Caches und nicht Sorgen Sie sich um einen Knotenausfall
Verwandte Empfehlungen:
PHP-Methode zum Erhalten von 6-stelligen Zufallszahlen, die in
Redis nicht vorhanden sindPHP implementiert redisMethode zur Nachrichtenwarteschlangenveröffentlichung Weibo
CI-Framework (CodeIgniter)-Betriebredis Schritt Analyse
Das obige ist der detaillierte Inhalt vonSo beheben Sie HTTP 500: Interner Serverfehler mit PHP+Redis in tatsächlichen Projekten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Der HTTP-Statuscode 520 bedeutet, dass der Server bei der Verarbeitung der Anfrage einen unbekannten Fehler festgestellt hat und keine genaueren Informationen bereitstellen kann. Wird verwendet, um darauf hinzuweisen, dass bei der Verarbeitung der Anforderung durch den Server ein unbekannter Fehler aufgetreten ist, der durch Serverkonfigurationsprobleme, Netzwerkprobleme oder andere unbekannte Gründe verursacht werden kann. Dies wird normalerweise durch Serverkonfigurationsprobleme, Netzwerkprobleme, Serverüberlastung oder Codierungsfehler verursacht. Wenn Sie auf einen Fehler mit dem Statuscode 520 stoßen, wenden Sie sich am besten an den Website-Administrator oder das technische Support-Team, um weitere Informationen und Unterstützung zu erhalten.

Der HTTP-Statuscode 403 bedeutet, dass der Server die Anfrage des Clients abgelehnt hat. Die Lösung für den HTTP-Statuscode 403 ist: 1. Überprüfen Sie die Authentifizierungsdaten. Wenn der Server eine Authentifizierung erfordert, stellen Sie sicher, dass die richtigen Anmeldedaten angegeben werden. 2. Überprüfen Sie die IP-Adresseinschränkungen Die IP-Adresse des Clients ist eingeschränkt oder nicht auf der Blacklist. Wenn der Statuscode 403 mit den Berechtigungseinstellungen der Datei oder des Verzeichnisses zusammenhängt, stellen Sie sicher, dass der Client über ausreichende Berechtigungen zum Zugriff auf diese Dateien oder Verzeichnisse verfügt. usw.

Verstehen Sie die Bedeutung des HTTP 301-Statuscodes: Häufige Anwendungsszenarien der Webseitenumleitung. Mit der rasanten Entwicklung des Internets werden die Anforderungen der Menschen an die Webseiteninteraktion immer höher. Im Bereich Webdesign ist die Webseitenumleitung eine gängige und wichtige Technologie, die über den HTTP-301-Statuscode implementiert wird. In diesem Artikel werden die Bedeutung des HTTP 301-Statuscodes und häufige Anwendungsszenarien bei der Webseitenumleitung untersucht. Der HTTP-Statuscode 301 bezieht sich auf eine permanente Weiterleitung (PermanentRedirect). Wenn der Server die des Clients empfängt

So implementieren Sie den automatischen Sprung von HTTP zu HTTPS mit NginxProxyManager Mit der Entwicklung des Internets beginnen immer mehr Websites, das HTTPS-Protokoll zur Verschlüsselung der Datenübertragung zu verwenden, um die Datensicherheit und den Schutz der Privatsphäre der Benutzer zu verbessern. Da das HTTPS-Protokoll die Unterstützung eines SSL-Zertifikats erfordert, ist bei der Bereitstellung des HTTPS-Protokolls eine gewisse technische Unterstützung erforderlich. Nginx ist ein leistungsstarker und häufig verwendeter HTTP-Server und Reverse-Proxy-Server sowie NginxProxy

Verwenden Sie die Funktion http.PostForm, um eine POST-Anfrage mit Formulardaten zu senden. Im http-Paket der Go-Sprache können Sie die Funktion http.PostForm verwenden, um eine POST-Anfrage mit Formulardaten zu senden. Der Prototyp der http.PostForm-Funktion lautet wie folgt: funcPostForm(urlstring,dataurl.Values)(resp*http.Response,errerror)wo, u

Schnelle Anwendung: Praktische Entwicklungsfallanalyse von PHP Asynchroner HTTP-Download mehrerer Dateien Mit der Entwicklung des Internets ist die Funktion zum Herunterladen von Dateien zu einem der Grundbedürfnisse vieler Websites und Anwendungen geworden. In Szenarien, in denen mehrere Dateien gleichzeitig heruntergeladen werden müssen, ist die herkömmliche synchrone Download-Methode oft ineffizient und zeitaufwändig. Aus diesem Grund ist die Verwendung von PHP zum asynchronen Herunterladen mehrerer Dateien über HTTP eine zunehmend verbreitete Lösung. In diesem Artikel wird anhand eines tatsächlichen Entwicklungsfalls detailliert analysiert, wie PHP asynchrones HTTP verwendet.

HTTP-Statuscode 200: Erkunden Sie die Bedeutung und den Zweck erfolgreicher Antworten. HTTP-Statuscodes sind numerische Codes, die den Status einer Serverantwort angeben. Darunter zeigt der Statuscode 200 an, dass die Anfrage vom Server erfolgreich verarbeitet wurde. In diesem Artikel wird die spezifische Bedeutung und Verwendung des HTTP-Statuscodes 200 untersucht. Lassen Sie uns zunächst die Klassifizierung von HTTP-Statuscodes verstehen. Statuscodes sind in fünf Kategorien unterteilt, nämlich 1xx, 2xx, 3xx, 4xx und 5xx. Unter diesen zeigt 2xx eine erfolgreiche Antwort an. Und 200 ist der häufigste Statuscode in 2xx

Lösung: 1. Überprüfen Sie den Inhaltstyp im Anforderungsheader. 3. Verwenden Sie das entsprechende Codierungsformat. 5. Überprüfen Sie die serverseitige Unterstützung.
