Maison développement back-end tutoriel php Comment dépanner HTTP 500 : erreur de serveur interne avec php+redis dans les projets réels

Comment dépanner HTTP 500 : erreur de serveur interne avec php+redis dans les projets réels

May 26, 2018 pm 03:17 PM
http

Le nombre d'utilisateurs a augmenté rapidement et le nombre de visites a doublé en peu de temps. Grâce à une bonne planification précoce des capacités, les ressources matérielles peuvent le prendre en charge, mais il y a un gros problème dans le système logiciel. : 40 % des requêtes renverront HTTP 500 : erreur de serveur interne

Description du problème
Le nombre d'utilisateurs a augmenté rapidement et le nombre de visites a doublé en une courte période de temps. En raison d'une bonne planification précoce des capacités, les ressources matérielles peuvent le prendre en charge, mais le système logiciel Un gros problème est survenu :
40 % des requêtes renverront HTTP 500 : erreur de serveur interne
En regardant les journaux, il a été constaté que l'erreur était dans le traitement de la connexion de PHP Redis
Gestion du débogage

La première fois
La racine la cause n'a pas été trouvée au début, nous n'avons donc pu essayer que diverses méthodes liées aux erreurs, telles que :
Ajouter un numéro de connexion PHP et augmenter le délai d'attente de 500 ms à 2,5 s
Désactiver default_socket_timeout dans les paramètres PHP
Désactivez les cookies SYN dans le système hôte
Vérifiez le nombre de descripteurs de fichiers dans Redis et les serveurs Web
Augmentez l'hôte Le mbuffer du système
Ajustez le nombre de retards TCP
...

J'ai essayé de nombreuses méthodes, mais toutes sont inefficaces

La deuxième fois
Je veux le faire à l'avance. J'ai essayé de reproduire ce problème dans l'environnement de publication, mais malheureusement, il a toujours échoué. Cela devrait être dû au fait que le trafic n'est pas assez important pour se reproduire

La troisième fois
Se pourrait-il que Redis ne soit pas fermé dans le code ?
Normalement, PHP fermera automatiquement la connexion aux ressources à la fin de l'exécution, mais il y aura des fuites de mémoire dans les anciennes versions. Par mesure de sécurité, modifiez le code et fermez la connexion manuellement
Le résultat est. toujours invalide

La 4ème fois
Cible suspecte : bibliothèque client phpredis
Faites des tests A/B, remplacez la bibliothèque predis et déployez-la auprès de 20 % des utilisateurs dans le centre de données
Grâce à la bonne structure du code, le travail de remplacement a été terminé rapidement
Mais le résultat est toujours invalide, mais il y a aussi un bon côté, qui peut prouver que phpredis est OK

La 5ème fois
J'ai vérifié la version de Redis et c'était la v2.6. La dernière version à l'époque était la v2.8.9
Essayez de mettre à niveau Redis, cela ne fonctionne toujours pas après. mise à niveau.
C'est bon. Restez optimiste. Ce n'est pas pratique. Mise à niveau de la version Redis vers la dernière

La 6ème fois
En recherchant beaucoup de documents, j'ai trouvé. une bonne méthode de débogage dans les documents officiels : Redis Software Watchdog, ouvrez-le et exécutez :

$ redis-cli --latency -p 6380 -h 1.2.3.4
min: 0, max: 463, avg: 2.03 (19443 samples)
Copier après la connexion

Voir le journal Redis :

...
[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
...
Copier après la connexion

Problème détecté :
Enregistrez les données sur le disque dur toutes les quelques minutes, pourquoi faut-il environ 400 ms pour créer un stockage en arrière-plan (vous pouvez voir à partir du moment où des 1er et 2ème journaux ci-dessus)

Ici, enfin, la cause première du problème a été trouvée. Comme il y a une grande quantité de données dans l'instance Redis, il faut beaucoup de temps pour exécuter le processus en arrière-plan. à chaque fois que l'opération de persistance est effectuée. De plus, les clés sont souvent modifiées dans leur activité, ce qui entraîne des déclenchements de persistance fréquents, ce qui signifie que l'opération de persistance est souvent déclenchée. Blocage de Redis

Solution : utilisez un autre. esclave pour la persistance

Cet esclave ne gère pas les demandes de trafic réelles. Sa seule fonction est de gérer la persistance et de télécharger l'instance Redis précédente. L'opération de persistance est transférée à cet esclave

L'effet est très. évident et le problème est fondamentalement résolu, mais parfois une erreur est toujours signalée

La 7ème fois
Possibilité de dépannage En bloquant la requête lente de Redis, on constate que des clés sont utilisées quelque part *

Comme il y a de plus en plus de données dans Redis, cette commande provoquera naturellement de sérieux blocages

Vous pouvez utiliser scan pour la remplacer

La 8ème fois
Après les ajustements précédents, le problème a été résolu dans les mois suivants, même si le trafic a continué à croître, il a pu y résister

Mais ils ont réalisé qu'il y a un nouveau problème :

La méthode actuelle consiste à créer une connexion Redis lorsqu'une requête arrive, à exécuter quelques commandes, puis à déconnecter la connexion. Lorsque le volume de la requête est important, cette méthode produit de graves problèmes de performances, plus de la moitié. des commandes sont utilisées pour traiter les opérations de connexion, ce qui dépasse le traitement de la logique métier et ralentit Redis

Solution : introduisez le proxy, ils ont choisi le twemproxy de Twitter, il suffit d'installer un proxy sur chaque serveur Web, et twemproxy est responsable des connexions persistantes avec les instances Redis, ce qui réduit considérablement les opérations de connexion

twemproxy possède également deux fonctionnalités pratiques :

Prend en charge memcached
Peut bloquer les commandes très chronophages ou dangereuses, telles que les clés , flushall
L'effet est naturellement parfait, et vous n'avez plus à vous soucier des erreurs de connexion précédentes

La 9ème fois
Poursuivre l'optimisation grâce au partage de données :

Diviser et isoler les données dans différents contextes
Hacher de manière cohérente les données des fragments dans le même contexte
Effet :

Réduit Les requêtes et les charges sur chaque machine
améliorent la fiabilité du cache, et il n'y a pas lieu de s'inquiéter de la défaillance d'un nœud

Ce qui précède est l'intégralité du contenu de cet article, j'espère qu'il sera utile à l'apprentissage de chacun.


Recommandations associées :

Méthode PHP pour obtenir un nombre aléatoire à 6 chiffres qui n'existe pas dans redis

PHP implémente redisMéthode de publication de la file d'attente de messages Weibo

Opération du framework CI (CodeIgniter)redis Étape analyse

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Que signifie le code d'état http 520 ? Que signifie le code d'état http 520 ? Oct 13, 2023 pm 03:11 PM

Le code d'état HTTP 520 signifie que le serveur a rencontré une erreur inconnue lors du traitement de la demande et ne peut pas fournir d'informations plus spécifiques. Utilisé pour indiquer qu'une erreur inconnue s'est produite lorsque le serveur traitait la demande, ce qui peut être dû à des problèmes de configuration du serveur, à des problèmes de réseau ou à d'autres raisons inconnues. Cela est généralement dû à des problèmes de configuration du serveur, des problèmes de réseau, une surcharge du serveur ou des erreurs de codage. Si vous rencontrez une erreur de code d'état 520, il est préférable de contacter l'administrateur du site Web ou l'équipe d'assistance technique pour plus d'informations et d'assistance.

Qu'est-ce que le code d'état http 403 ? Qu'est-ce que le code d'état http 403 ? Oct 07, 2023 pm 02:04 PM

Le code d'état HTTP 403 signifie que le serveur a rejeté la demande du client. La solution au code d'état http 403 est la suivante : 1. Vérifiez les informations d'authentification. Si le serveur requiert une authentification, assurez-vous que les informations d'identification correctes sont fournies ; 2. Vérifiez les restrictions d'adresse IP. Si le serveur a restreint l'adresse IP, assurez-vous que les informations d'identification sont correctes. l'adresse IP du client est restreinte. Sur liste blanche ou non sur liste noire ; 3. Vérifiez les paramètres d'autorisation du fichier. Si le code d'état 403 est lié aux paramètres d'autorisation du fichier ou du répertoire, assurez-vous que le client dispose des autorisations suffisantes pour accéder à ces fichiers ou répertoires. etc.

Comment utiliser Nginx Proxy Manager pour implémenter le saut automatique de HTTP à HTTPS Comment utiliser Nginx Proxy Manager pour implémenter le saut automatique de HTTP à HTTPS Sep 26, 2023 am 11:19 AM

Comment utiliser NginxProxyManager pour implémenter le saut automatique de HTTP à HTTPS Avec le développement d'Internet, de plus en plus de sites Web commencent à utiliser le protocole HTTPS pour crypter la transmission des données afin d'améliorer la sécurité des données et la protection de la vie privée des utilisateurs. Le protocole HTTPS nécessitant la prise en charge d'un certificat SSL, un certain support technique est requis lors du déploiement du protocole HTTPS. Nginx est un serveur HTTP et un serveur proxy inverse puissants et couramment utilisés, et NginxProxy

Comprendre les scénarios d'application courants de redirection de pages Web et comprendre le code d'état HTTP 301 Comprendre les scénarios d'application courants de redirection de pages Web et comprendre le code d'état HTTP 301 Feb 18, 2024 pm 08:41 PM

Comprendre la signification du code d'état HTTP 301 : scénarios d'application courants de redirection de pages Web Avec le développement rapide d'Internet, les exigences des utilisateurs en matière d'interaction avec les pages Web sont de plus en plus élevées. Dans le domaine de la conception Web, la redirection de pages Web est une technologie courante et importante, mise en œuvre via le code d'état HTTP 301. Cet article explorera la signification du code d'état HTTP 301 et les scénarios d'application courants dans la redirection de pages Web. Le code d'état HTTP 301 fait référence à une redirection permanente (PermanentRedirect). Lorsque le serveur reçoit le message du client

Application rapide : analyse de cas de développement pratique du téléchargement HTTP asynchrone PHP de plusieurs fichiers Application rapide : analyse de cas de développement pratique du téléchargement HTTP asynchrone PHP de plusieurs fichiers Sep 12, 2023 pm 01:15 PM

Application rapide : analyse de cas de développement pratique de PHP Téléchargement HTTP asynchrone de plusieurs fichiers Avec le développement d'Internet, la fonction de téléchargement de fichiers est devenue l'un des besoins fondamentaux de nombreux sites Web et applications. Pour les scénarios dans lesquels plusieurs fichiers doivent être téléchargés en même temps, la méthode de téléchargement synchrone traditionnelle est souvent inefficace et prend du temps. Pour cette raison, utiliser PHP pour télécharger plusieurs fichiers de manière asynchrone via HTTP est devenu une solution de plus en plus courante. Cet article analysera en détail comment utiliser le HTTP asynchrone PHP à travers un cas de développement réel.

Envoyer une requête POST avec les données du formulaire à l'aide de la fonction http.PostForm Envoyer une requête POST avec les données du formulaire à l'aide de la fonction http.PostForm Jul 25, 2023 pm 10:51 PM

Utilisez la fonction http.PostForm pour envoyer une requête POST avec des données de formulaire. Dans le package http du langage Go, vous pouvez utiliser la fonction http.PostForm pour envoyer une requête POST avec des données de formulaire. Le prototype de la fonction http.PostForm est le suivant : funcPostForm(urlstring,dataurl.Values)(resp*http.Response,errerror)where, u

HTTP 200 OK : comprendre la signification et le but d'une réponse réussie HTTP 200 OK : comprendre la signification et le but d'une réponse réussie Dec 26, 2023 am 10:25 AM

Code d'état HTTP 200 : explorez la signification et l'utilisation des réponses réussies Les codes d'état HTTP sont des codes numériques utilisés pour indiquer l'état de la réponse d'un serveur. Parmi eux, le code d'état 200 indique que la demande a été traitée avec succès par le serveur. Cet article explorera la signification spécifique et l'utilisation du code d'état HTTP 200. Tout d’abord, comprenons la classification des codes d’état HTTP. Les codes d'état sont divisés en cinq catégories, à savoir 1xx, 2xx, 3xx, 4xx et 5xx. Parmi eux, 2xx indique une réponse réussie. Et 200 est le code d'état le plus courant dans 2xx

Solution d'erreur de requête http 415 Solution d'erreur de requête http 415 Nov 14, 2023 am 10:49 AM

Solution : 1. Vérifiez le type de contenu dans l'en-tête de la requête ; 2. Vérifiez le format des données dans le corps de la requête ; 3. Utilisez le format de codage approprié. 4. Utilisez la méthode de requête appropriée ;

See all articles