Maison >base de données >Redis >Parlons des raisons pour lesquelles Redis est lent et comment le résoudre.
Cet article vous apporte des connaissances pertinentes sur Redis. Il présente principalement des problèmes connexes sur les raisons pour lesquelles Redis est lent et comment le résoudre. Examinons-le ensemble. J'espère qu'il sera utile à tout le monde.
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 provoquer Redis pour ralentir.
Lorsque nous utilisons Redis comme cache pur, nous définissons généralement une limite supérieure 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.
Raisons du ralentissement
Lorsque la mémoire Redis atteint la mémoire maximale, avant d'écrire de nouvelles données à chaque fois, 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
Dans 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)'
Le résultat de sortie est le suivant
Size: 1256 kB Swap: 0 kB Size: 4 kB Swap: 0 kB Size: 132 kB Swap: 0 kB Size: 63488 kB Swap: 0 kB Size: 132 kB Swap: 0 kB Size: 65404 kB Swap: 0 kB Size: 1921024 kB Swap: 0 kB ...
Ce résultat répertoriera l'utilisation de la mémoire du processus Redis. E Chaque ligne de SIZE indique un morceau de mémoire utilisé par Redis, et le Swap sous SIZE indique que la taille de cette taille a été remplacée sur le disque. Si ces deux valeurs sont égales, cela signifie que les données de cette mémoire. data Tous ont été complètement transférés 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 ne sera pas grand. 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 en temps opportun.
Idées de dépannage
Si 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 ralentissement
Lorsque 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.
En plus de la mémoire de fonctionnement, les hautes performances de Redis 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.
Solution
1) Connexions courtes et fréquentes
Votre application métier doit utiliser des connexions longues pour faire fonctionner Redis afin d'éviter les connexions courtes fréquentes.
.
2) Surveillance du fonctionnement et de la maintenance
J'ai également mentionné plus tôt 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.
ce qui fait que Redis répond lentement.
3) D'autres programmes se disputent les ressources
La dernière chose que je dois vous rappeler est 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!