Maison > Article > base de données > Une brève discussion sur les raisons pour lesquelles Redis est lent et comment le résoudre
Apprentissage recommandé : Tutoriel vidéo Redis
Idées de dépannage
Si votre instance Redis a une limite supérieure de mémoire de maxmemory, cela peut également causer Redis pour ralentir.
Lorsque nous utilisons Redis comme cache pur, nous définissons généralement une limite de mémoire maxmemory pour cette instance, puis définissons une stratégie d'élimination des données. Lorsque la mémoire de l'instance atteint maxmemory, vous constaterez peut-être que le délai d'opération augmente à chaque fois que vous écrivez de nouvelles données par la suite.
Cause du ralentissement
Lorsque la mémoire Redis atteint la mémoire maximale, avant chaque écriture de nouvelles données, Redis doit d'abord expulser une partie des données de l'instance pour conserver la mémoire de l'instance entière en dessous de la mémoire maximale, puis seulement ensuite de nouvelles données peuvent-elles être écrites.
Cette logique d'élimination des anciennes données prend également du temps, et la durée spécifique dépend de la stratégie d'élimination que vous configurez :
La stratégie d'élimination est modifiée en élimination aléatoire, qui est beaucoup plus rapide que LRU (selon la situation commerciale)
Divisez l'instance et éliminez le key La pression est répartie sur plusieurs instancesÀ partir de la version 2.6.38, le noyau Linux prend en charge le mécanisme de mémoire énorme, qui permet aux applications de demander de la mémoire au système d'exploitation par unités de 2 Mo.
L'unité de mémoire que l'application applique au système d'exploitation à chaque fois devient plus grande, mais cela signifie également que le temps nécessaire pour demander de la mémoire devient plus long.Solution
Désactivez le mécanisme des énormes pages.
Tout d'abord, vous devez vérifier si la machine Redis a activé les grandes pages :
$ cat /sys/kernel/mm/transparent_hugepage/enabled [always] madvise never
Si l'option de sortie est toujours, cela signifie que le mécanisme des grandes pages est actuellement activé, et nous devons le désactiver :
$ echo never > /sys/kernel/mm/transparent_hugepage/enabled
En fait, le système d'exploitation fournit L'avantage du mécanisme de page de mémoire énorme est qu'il peut réduire le nombre d'applications qui doivent demander de la mémoire dans certains programmes.
Mais pour une base de données comme Redis qui est extrêmement sensible aux performances et à la latence, nous espérons que Redis prendra le moins de temps possible à chaque fois qu'elle demande de la mémoire, je ne vous recommande donc pas d'activer ce mécanisme sur la machine Redis .
Idées de dépannage
Si vous constatez que Redis devient soudainement très lent et que chaque opération prend des centaines de millisecondes, voire des secondes, vous devez alors vérifier si Redis Swap est utilisé, et dans ce cas Dans ce cas, Redis est fondamentalement incapable de fournir des services hautes performances.
Causes du ralentissement
Qu'est-ce que Swap ? Pourquoi l'utilisation de Swap entraîne-t-elle une dégradation des performances de Redis ?
Si vous connaissez quelque chose sur le système d'exploitation, vous saurez que afin d'atténuer l'impact d'une mémoire insuffisante sur les applications, le système d'exploitation permet de déplacer une partie des données en mémoire vers le disque pour tamponner l'utilisation de la mémoire. de l'application. Ces données de mémoire La zone qui est échangée sur le disque est Swap.
Le problème est que lorsque les données de la mémoire sont déplacées vers le disque, lorsque Redis accède à nouveau aux données, il doit les lire à partir du disque. La vitesse d'accès au disque est des centaines de fois plus lente que celle d'accès à la mémoire ! Surtout pour une base de données comme Redis, qui a des exigences de performances extrêmement élevées et est extrêmement sensible aux performances, ce retard de fonctionnement est inacceptable.
À ce stade, vous devez vérifier l'utilisation de la mémoire de la machine Redis pour confirmer si Swap est utilisé. Vous pouvez vérifier si le processus Redis utilise Swap de la manière suivante :
# 先找到 Redis 的进程 ID $ ps -aux | grep redis-server # 查看 Redis Swap 使用情况 $ cat /proc/$pid/smaps | egrep '^(Swap|Size)'
Les résultats de sortie sont les suivants
Taille : 1256 Ko
Ce résultat répertoriera l'utilisation de la mémoire par le processus Redis.
Swap : 0 Ko
Taille : 4 Ko
Swap : 0 Ko B
Taille : 132 Ko
Swap : 0 Ko
Taille : 63488 Ko
Swap : 0 Ko
Taille : 132 Ko
Swap : 0 kB
Taille : 65404 kB
Échange :
...
Chaque ligne de Size représente la taille d'un morceau de mémoire utilisé par Redis. Le Swap ci-dessous Size représente la taille de cette mémoire et la quantité de données qui ont été échangées sur le disque. Si ces deux valeurs sont égales, cela signifie que les données de cette mémoire ont toutes été complètement transférées sur le disque.
Si seulement une petite quantité de données est échangée sur le disque, par exemple, chaque Swap occupe une petite proportion de la taille correspondante, l'impact n'est pas très important. Si des centaines de mégaoctets, voire de Go de mémoire, sont transférés sur le disque, vous devez alors être vigilant. Dans ce cas, les performances de Redis chuteront certainement fortement.
SolutionAugmentez la mémoire de la machine afin que Redis ait suffisamment de mémoire à utiliser
On peut voir que lorsque Redis utilise Swap, les performances de Redis à l'heure actuelle ne peuvent fondamentalement pas répondre aux exigences de haute performance (vous pouvez comprendre que les arts martiaux sont abolis), vous devez donc également éviter cette situation à l'avance.
Le moyen de l'éviter est que vous devez surveiller la mémoire et l'utilisation du Swap de la machine Redis, déclencher une alarme lorsque la mémoire est insuffisante ou que le Swap est utilisé et le gérer à temps.
Cause 4 : Surcharge de bande passante du réseau
Idées de dépannageSi vous avez évité les scénarios ci-dessus qui provoquent des problèmes de performances et que Redis fonctionne de manière stable depuis longtemps, mais après un certain temps, l'opération Redis a soudainement commencé à ralentir et continue de ralentir. Quelle en est la raison ?
À ce stade, vous devez vérifier si la bande passante réseau de la machine Redis est surchargée et s'il existe une instance qui remplit la bande passante réseau de l'ensemble de la machine.
Raisons du ralentissementLorsque la bande passante du réseau est surchargée, le serveur connaîtra des retards d'envoi de paquets, des pertes de paquets, etc. au niveau de la couche TCP et de la couche réseau.
Les hautes performances de Redis, en plus de la mémoire de fonctionnement, résident dans les E/S du réseau. S'il y a un goulot d'étranglement dans les E/S du réseau, cela affectera également sérieusement les performances de Redis.
SolutionConfirmez en temps opportun que l'instance Redis a occupé toute la bande passante du réseau. S'il s'agit d'un accès professionnel normal, vous devez étendre ou migrer l'instance à temps pour éviter d'affecter d'autres instances de cette machine en raison d'un excès. trafic de cette instance.
Votre application métier doit utiliser des connexions longues pour faire fonctionner Redis afin d'éviter les connexions courtes fréquentes.
Les connexions courtes et fréquentes obligeront Redis à passer beaucoup de temps à établir et à libérer les connexions. La poignée de main à trois voies et la vague à quatre voies de TCP augmenteront également les délais d'accès.
2) Surveillance du fonctionnement et de la maintenanceJ'ai également mentionné auparavant que si vous souhaitez prévoir le ralentissement de Redis à l'avance, il est essentiel de faire un bon travail de surveillance.
La surveillance est en fait la collecte de divers indicateurs d'exécution de Redis. L'approche habituelle consiste pour le programme de surveillance à collecter régulièrement les informations INFO de Redis, puis à effectuer un affichage des données et une alarme en fonction des données d'état contenues dans les informations INFO.
Ce que je dois vous rappeler ici, c'est que vous ne pouvez pas le prendre à la légère lorsque vous écrivez des scripts de surveillance ou utilisez des composants de surveillance open source.
Lorsque vous écrivez des scripts de surveillance pour accéder à Redis, essayez d'utiliser des connexions longues pour collecter des informations d'état afin d'éviter des connexions courtes et fréquentes. Dans le même temps, vous devez également veiller à contrôler la fréquence d'accès à Redis pour éviter d'affecter les demandes commerciales.
Lors de l'utilisation de certains composants de surveillance open source, il est préférable de comprendre les principes de mise en œuvre de ces composants et de configurer ces composants correctement pour éviter les bogues dans les composants de surveillance, entraînant un grand nombre d'opérations Redis dans un court laps de temps et affectant les performances de Redis.
Il nous est arrivé à cette époque que lorsque le DBA utilisait certains composants open source, en raison de problèmes de configuration et d'utilisation, le programme de surveillance s'établissait et se déconnectait fréquemment de Redis, ce qui entraînait une réponse lente de Redis.
3) D'autres programmes se disputent les ressources
Enfin, je dois vous rappeler que votre machine Redis est mieux dédiée et utilisée uniquement pour déployer des instances Redis. Essayez de fournir un environnement relativement silencieux pour Redis. . » pour empêcher d’autres programmes d’occuper les ressources du processeur, de la mémoire et du disque, ce qui entraîne des ressources insuffisantes allouées à Redis.
Apprentissage recommandé : Tutoriel vidéo Redis
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!