


Comment dépanner HTTP 500?: erreur de serveur interne avec php+redis dans les projets réels
May 26, 2018 pm 03:17 PMLe nombre d'utilisateurs a augmenté rapidement et le nombre de visites a doublé en peu de temps. Grace à 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
Grace à 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)
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 ...
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 grace 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!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

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

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

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

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.

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

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.

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

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

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.

Explorez les causes et les solutions du code d'état HTTP 404 Introduction : Lors du processus de navigation sur le Web, nous rencontrons souvent le code d'état HTTP 404. Ce code d'état indique que le serveur n'a pas pu trouver la ressource demandée. Dans cet article, nous explorerons les causes du code d'état HTTP 404 et partagerons quelques solutions. 1. Raisons du code d'état HTTP 404?: 1.1 La ressource n'existe pas?: La raison la plus courante est que la ressource demandée n'existe pas sur le serveur. Cela peut être d? à une suppression accidentelle du fichier, à un nom incorrect, à un chemin incorrect, etc.

Problèmes courants de communication réseau et de sécurité et solutions en C# à l'ère d'Internet d'aujourd'hui, la communication réseau est devenue un élément indispensable du développement logiciel. En C#, nous rencontrons généralement certains problèmes de communication réseau, tels que la sécurité de la transmission des données, la stabilité de la connexion réseau, etc. Cet article abordera en détail les problèmes courants de communication réseau et de sécurité en C# et fournira les solutions correspondantes et des exemples de code. 1. Problèmes de communication réseau Interruption de la connexion réseau?: pendant le processus de communication réseau, la connexion réseau peut être interrompue, ce qui peut entra?ner
