Introduction
Ce document décrit comment dépanner les fuites de mémoire MallocLite sur les plates-formes logicielles Cisco IOS®.
Il indique également les informations que vous devez collecter avant d'ouvrir un dossier du centre d'assistance technique Cisco (TAC) ou de recharger le périphérique. Collectez les résultats mentionnés dans ce document et joignez-les au dossier TAC afin d'accélérer la résolution des problèmes.
Informations générales
MallocLite est utilisé par le gestionnaire de mémoire afin d'allouer de petites parties de mémoire de taille fixe, appelées blocs, pour des allocations inférieures ou égales à 128 octets. Les allocations de mémoire de petite taille n'ont pas la surcharge d'un en-tête de bloc pour chaque allocation. Cette fonctionnalité est prise en charge pour les pools de mémoire des processeurs uniquement.
Chaque en-tête de bloc de mémoire prend environ 48 octets de mémoire, et le plus petit bloc prend environ 24 octets. Avec une approche traditionnelle de la plate-forme logicielle Cisco IOS pour chaque allocation, vous consommez au moins 72 (48 + 24) octets de mémoire, même si vous devez allouer seulement 8 octets de données réelles.
Avec MallocLite, cette surcharge peut être réduite par l'utilisation de segments. Il y a encore une surcharge, parce que les morceaux doivent être gérés. Cependant, comme les segments sont de taille fixe, ils sont gérés différemment des blocs et la surcharge est moindre.
Il incombe aux applications qui utilisent la mémoire MallocLite de la libérer correctement. MallocLite masque l'utilisateur de la mémoire.
Dépannage
Remarque : l'analyseur CLI Cisco (clients enregistrés uniquement) prend en charge certaines commandes show. Utilisez cet outil pour obtenir une analyse des rapports produits par ces commandes.
Identifier l'application responsable de la fuite
Il est généralement difficile d'identifier un bogue existant si vous effectuez une recherche uniquement à l'aide du mot clé malloclite.
Cet exemple montre que le processus *MallocLite* contient une quantité anormale de mémoire :
#show processes memory sorted
Processor Pool Total: 1614282720 Used: 1544726580 Free: 69556140
I/O Pool Total: 313524224 Used: 115564032 Free: 197960192
PID TTY Allocated Freed Holding Getbufs Retbufs Process
0 0 0 0 1476043512 0 0 *MallocLite*
Vous devez identifier l'application exacte responsable de la fuite. Trois méthodes d'identification sont possibles :
- Décodez le PC allocateur.
- Analysez les statistiques de la mémoire MallocLite.
- Désactivez MallocLite.
PC allocateur de décodage
Même avec MallocLite activé, vous pouvez généralement voir quelle fonction a demandé la mémoire. Le résultat de la commande show memory allocate-process totals peut afficher différentes valeurs PC même si le nom signalé est MallocLite :
#show memory allocating-process totals
<snip>
Allocator PC Summary for: Processor
Displayed first 2048 Allocator PCs only
PC Total Count Name
0x620BE3C4 42807572 594 MallocLite
0x620ADDD4 13597308 193 MallocLite
0x60738BB0 8909824 122 MallocLite
0x620AE0E0 2060716 31 MallocLite
0x620AE10C 1982780 30 MallocLite
Un ingénieur du centre d'assistance technique Cisco peut décoder les valeurs PC en haut de la liste (avec le total le plus élevé). Cela permet d'identifier l'application qui présente la fuite de mémoire.
Analyse des statistiques de mémoire MallocLite
Parmi les améliorations apportées à la version 15.1T du logiciel Cisco IOS, une nouvelle interface de ligne de commande (CLI) affichait le résumé de la mémoire MallocLite allouée par chaque PC. La commande show memory lite-chunks peut vous aider à identifier les applications qui utilisent une grande quantité de blocs MallocLite.
show memory lite-chunks { statistics | totals } { summary { pool | { all | pool } } }
Référez-vous à la référence de commande pour les détails de la commande show memory lite-chunks.
CLI : show memory lite-chunks totals
DESC : Summary of all pools, based on alloc pc.
This cli can be used to find the alloc_pc which is using large amount memory
allocated from all mlite pools
CLI : show memory lite-chunks statistics
DESC : Displays number of allocated & free mlite chunks
CLI : show memory lite-chunks summary pool pool
DESC : Show summary of particular mlite pool
This cli can be used to find the alloc_pc which is using large amount of memory
in individual mlite pool
CLI : show memory lite-chunks summary pool all
DESC : Show individual summary of all mlite pools
CLI : show memory lite-chunks pool pool
DESC : Show All chunk elements in the specified pool
CLI : show memory lite-chunks pool all
DESC : show all chunk elements in all mlite pools
Voici des exemples de résultats de cette commande :
#show memory lite-chunks ?
pool Malloc lite pool
statistics Malloc lite statistics
summary Malloc Lite summary
totals Malloc Lite Allocating totals
#show memory lite-chunks statistics
Pool Inuse Free
8-Bytes 140 1904
20-Bytes 173 1313
44-Bytes 171 791
68-Bytes 24 687
96-Bytes 26 519
128-Bytes 20 410
#show memory lite-chunks totals
PC Total Count
26067AE0 2112 33
2269E68C 1932 29
2269FACC 1664 29
2269F964 1664 26
2269FA9C 1580 29
26067FB4 1360 34
23CD2A0C 1036 7
#show memory lite-chunks pool ?
128-Bytes 128 bytes pool
20-Bytes 20 bytes pool
44-Bytes 44 bytes pool
68-Bytes 68 bytes pool
8-Bytes 8 bytes pool
96-Bytes 96 bytes pool
all all pools
#show memory lite-chunks summary pool 8
8 bytes pool
PC Total Count
2269FB10 812 29
23612084 700 25
2269F9F8 700 25
2269F9EC 700 25
Là encore, l'ingénieur TAC peut décoder les valeurs PC avec le total le plus élevé et identifier l'application qui fuit la mémoire.
Désactiver MallocLite
La fonction MallocLite est activée par défaut. Afin d'enquêter sur la fuite MallocLite, vous pouvez désactiver MallocLite :
(config)#no memory lite
La mémoire perdue sera toujours sous MallocLite jusqu'au prochain rechargement ; cependant, vous pouvez commencer à surveiller d'autres fuites avec les commandes show processes memory sorted et show memory allocate-process totals. Les fuites apparaîtront à présent dans le cadre du processus réel.
Si la mémoire du périphérique est insuffisante, vous devez enregistrer la configuration et recharger le périphérique afin de libérer la mémoire :
#wr
#reload
La mémoire peut s'épuiser à nouveau au fil du temps, donc utilisez les commandes show processes memory sorted et show memory allocate-process totals afin de surveiller l'utilisation de la mémoire à partir de ce point.
Remarque : Si vous désactivez MallocLite avec la commande no memory lite et rechargez le périphérique, le résultat de la commande show memory lite-chunks sera vide.
Référez-vous à la référence de commande pour plus de détails sur la commande memory Lite.