5.13. Dépannage en cas d'utilisation élevée de la mémoire
Les scénarios suivants peuvent entraîner une utilisation élevée de la mémoire :
-
Le processus
pmproxy
est occupé à traiter de nouvelles archives PCP et n'a pas de cycles de CPU disponibles pour traiter les requêtes et les réponses Redis. - Le nœud ou le cluster Redis est surchargé et ne peut pas traiter les demandes entrantes à temps.
Le démon de service pmproxy
utilise les flux Redis et prend en charge les paramètres de configuration, qui sont des paramètres de réglage PCP et affectent l'utilisation de la mémoire Redis et la conservation des clés. Le fichier /etc/pcp/pmproxy/pmproxy.conf
répertorie les options de configuration disponibles pour pmproxy
et les API associées.
La procédure suivante décrit comment résoudre un problème d'utilisation élevée de la mémoire.
Conditions préalables
Installez le paquetage
pcp-pmda-redis
:# dnf install pcp-pmda-redis
Installez le PMDA redis :
# cd /var/lib/pcp/pmdas/redis && ./Install
Procédure
Pour résoudre un problème d'utilisation élevée de la mémoire, exécutez la commande suivante et observez la colonne
inflight
:$ pmrep :pmproxy backlog inflight reqs/s resp/s wait req err resp err changed throttled byte count count/s count/s s/s count/s count/s count/s count/s 14:59:08 0 0 N/A N/A N/A N/A N/A N/A N/A 14:59:09 0 0 2268.9 2268.9 28 0 0 2.0 4.0 14:59:10 0 0 0.0 0.0 0 0 0 0.0 0.0 14:59:11 0 0 0.0 0.0 0 0 0 0.0 0.0
Cette colonne indique le nombre de requêtes Redis en cours, ce qui signifie qu'elles sont en file d'attente ou envoyées et qu'aucune réponse n'a été reçue jusqu'à présent.
Un nombre élevé indique l'une des conditions suivantes :
-
Le processus
pmproxy
est occupé à traiter de nouvelles archives PCP et n'a pas de cycles de CPU disponibles pour traiter les requêtes et les réponses Redis. - Le nœud ou le cluster Redis est surchargé et ne peut pas traiter les demandes entrantes à temps.
-
Le processus
Pour résoudre le problème de l'utilisation élevée de la mémoire, réduisez le nombre de processus
pmlogger
pour cette ferme et ajoutez une autre ferme pmlogger. Utilisez la configuration fédérée - plusieurs fermes pmlogger.Si le nœud Redis utilise 100 PU pendant une période prolongée, déplacez-le vers un hôte plus performant ou utilisez plutôt une configuration Redis en grappe.
Pour afficher les paramètres de
pmproxy.redis.*
, utilisez la commande suivante :$ pminfo -ftd pmproxy.redis pmproxy.redis.responses.wait [wait time for responses] Data Type: 64-bit unsigned int InDom: PM_INDOM_NULL 0xffffffff Semantics: counter Units: microsec value 546028367374 pmproxy.redis.responses.error [number of error responses] Data Type: 64-bit unsigned int InDom: PM_INDOM_NULL 0xffffffff Semantics: counter Units: count value 1164 [...] pmproxy.redis.requests.inflight.bytes [bytes allocated for inflight requests] Data Type: 64-bit int InDom: PM_INDOM_NULL 0xffffffff Semantics: discrete Units: byte value 0 pmproxy.redis.requests.inflight.total [inflight requests] Data Type: 64-bit unsigned int InDom: PM_INDOM_NULL 0xffffffff Semantics: discrete Units: count value 0 [...]
Pour connaître le nombre de requêtes Redis en cours, consultez les métriques
pmproxy.redis.requests.inflight.total
etpmproxy.redis.requests.inflight.bytes
pour savoir combien d'octets sont occupés par toutes les requêtes Redis en cours.En général, la file d'attente des requêtes redis est nulle, mais elle peut s'allonger en fonction de l'utilisation des grandes fermes pmlogger, ce qui limite l'évolutivité et peut entraîner des temps de latence élevés pour les clients
pmproxy
.Utilisez la commande
pminfo
pour afficher des informations sur les mesures de performance. Par exemple, pour afficher les mesures deredis.*
, utilisez la commande suivante :$ pminfo -ftd redis redis.redis_build_id [Build ID] Data Type: string InDom: 24.0 0x6000000 Semantics: discrete Units: count inst [0 or "localhost:6379"] value "87e335e57cffa755" redis.total_commands_processed [Total number of commands processed by the server] Data Type: 64-bit unsigned int InDom: 24.0 0x6000000 Semantics: counter Units: count inst [0 or "localhost:6379"] value 595627069 [...] redis.used_memory_peak [Peak memory consumed by Redis (in bytes)] Data Type: 32-bit unsigned int InDom: 24.0 0x6000000 Semantics: instant Units: count inst [0 or "localhost:6379"] value 572234920 [...]
Pour connaître l'utilisation maximale de la mémoire, consultez la métrique
redis.used_memory_peak
.
Ressources supplémentaires
-
pmdaredis(1)
,pmproxy(1)
, etpminfo(1)
pages de manuel - Architectures de déploiement PCP