Logiciels Cisco IOS et NX-OS : Logiciel Cisco IOS Versions 12.1 Mainline

Dépannage des problèmes de mémoire

17 décembre 2015 - Traduction automatique
Autres versions: PDFpdf | Anglais (24 août 2015) | Commentaires


Interactif : Ce document propose une analyse personnalisée de votre périphérique Cisco.


Contenu


Introduction

Ce document explique les symptômes et possibles causes de défaillance d'allocation de mémoire (MALLOCFAIL), et fournit des directives pour le dépannage des problèmes de mémoire.

Conditions préalables

Conditions requises

Aucune spécification déterminée n'est requise pour ce document.

Composants utilisés

Les informations contenues dans ce document sont basées sur les versions de matériel et de logiciel suivantes :

  • Toutes les versions de logiciel de Ý de Cisco IOS

  • Tous les routeurs Cisco

    Remarque: Ce document ne s'applique pas aux commutateurs Cisco Catalyst qui utilisent les plates-formes MGX ou CatOS.

Les informations contenues dans ce document ont été créées à partir des périphériques d'un environnement de laboratoire spécifique. Tous les périphériques utilisés dans ce document ont démarré avec une configuration effacée (par défaut). Si votre réseau est opérationnel, assurez-vous que vous comprenez l'effet potentiel de toute commande.

Conventions

Pour plus d'informations sur les conventions utilisées dans ce document, reportez-vous à Conventions relatives aux conseils techniques Cisco.

Qu'est-ce que la défaillance d'allocation de mémoire ?

La défaillance d'allocation de mémoire peut signifier que :

  • le routeur a utilisé toute la mémoire disponible (temporairement ou de manière permanente), ou

  • la mémoire a été fragmentée en parties si petites que le routeur ne peut pas trouver de bloc disponible utilisable. Cela peut se produire avec la mémoire de processeur (utilisée par IOS) ou avec la mémoire de paquets (utilisée par les paquets entrants et sortants).

Symptômes

Les symptômes de la défaillance d'allocation de mémoire incluent, mais ne se limitent pas à :

  • Message de la console ou du journal : "%SYS-2-MALLOCFAIL : Memory allocation of 1028 bytes failed from 0x6015EC84, Pool Processor, alignment 0 »

  • Sessions Telnet refusées

  • La commande show processor memory est affichée quelle que soit la commande que vous saisissez sur une console

  • Aucune sortie de certaines commandes show

  • Messages « Low on memory »

  • Le message de la console « Unable to create EXEC - no memory or too many processes »

  • Le routeur se fige et la console ne répond plus

"Erreur « Unable to Create EXEC » ou lorsque la console ne répond pas

Lorsqu'un routeur commence à manquer de mémoire, parfois il n'est pas possible de connecter en Telnet au routeur. Dans ce cas, il est important d'obtenir un accès au port de la console pour collecter des données pour le dépannage. Toutefois, en vous connectant au port de la console, vous pourriez voir ceci :

%% Unable to create EXEC - no memory or too many processes

Si vous voyez le message ci-dessus, il n'y a même pas assez de mémoire disponible pour permettre une connexion à la console. Il existe des étapes que vous pouvez suivre pour permettre la capture de données par la console. Si vous aidez le routeur à libérer de la mémoire, la console peut répondre, et vous pouvez alors capturer les données nécessaires du routeur pour le dépannage.

Remarque: Si le protocole BGP (Border Gateway Protocol) est configuré sur le routeur, vous devriez vous référer à Réaliser un routage optimal et réduire la consommation de mémoire BGP pour réduire la consommation de mémoire liée à ce processus.

Voici les étapes à suivre pour essayer de capturer des données à l'aide du port de console dans des conditions de mémoire très réduite :

  1. Déconnectez les câbles LAN et WAN des interfaces du routeur. Le routeur arrêtera de transmettre des paquets.

  2. Revérifiez la console. Pouvez-vous obtenir une réponse et exécuter des commandes ? Après quelques instants, il devrait y avoir assez de mémoire disponible pour permettre à la console de répondre.

  3. Collectez les informations nécessaires du mode EXEC privilégié (Routeur#). Au minimum, il vous faut collecter la sortie complète des commandes suivantes : show memory allocating-process totals (ou show memory summary si show memory allocating-process totals n'est pas disponible), show logging, et si possible, show technical-support.

  4. Après que vous avez collecté les données nécessaires, rebranchez tous les liens LAN et WAN et continuez la surveillance de l'utilisation de la mémoire du routeur.

Comprendre le message d'erreur

Lorsque vous exécutez une commande show logging, vous devriez obtenir le résultat suivant :

%SYS-2-MALLOCFAIL: Memory allocation of [X] bytes failed from
0x6015EC84, pool [Pool], alignment 0 -Process= 
"[Process]" ipl= 6, pid=5

[X] = nombre d'octets que le routeur a tenté d'attribuer sans y parvenir car il n'a pas trouvé suffisamment de mémoire libre

[Pool] indique si la mémoire du processeur (« Pool Processor ») ou la mémoire de paquets (« pool I/O ») est affectée. La mémoire tampon des routeurs haute gamme (gamme 7000 et 7500) se situe dans la DRAM principale, c'est pourquoi un manque de mémoire de paquets sera rapporté comme « pool processor ». Les cartes de la gamme 7200 et de Versatile Interface Processor (VIP) peuvent également rapporter des erreurs dans l'information de contrôle du protocole de regroupement (« pool PCI ») pour la mémoire de paquets.

[Process] est le processus qui a été affecté par le manque de mémoire.

Causes possibles

Dans la mémoire du processeur (« Pool Processor » sur toutes les plates-formes)

La taille de la mémoire ne prend pas en charge l'image logicielle de Cisco IOS

Bogue de fuite de mémoire

Grande quantité de mémoire utilisée pour des processus normaux ou anormaux

Problème ou bogue de fragmentation de mémoire

Défaillance d'allocation de mémoire en cours = <niveau de priorité d'interruption>

Problèmes identifiés

Problème 70x0 identifié lors du chargement du logiciel Cisco IOS de grande taille depuis de la mémoire Flash ou Netboot

Entrée d'IP et découverte CiscoWorks UT

Dans la mémoire de paquets (« I/O » ou « processeur » sur les routeurs haute gamme, « PCI » sur la gamme 7200 et cartes VIP)

Pas assez de mémoire partagée pour les interfaces

Bogue de fuite de la mémoire tampon

Le routeur commence à manquer de mémoire rapide

Dépannage

Problème lié à la sécurité

Généralement, les erreurs MALLOCFAIL sont provoquées par un problème de sécurité, tel qu'un ver ou un virus circulant dans votre réseau. Cette cause est fort probable s'il n'y a pas eu de changements récents sur le réseau, comme une mise à niveau du routeur Cisco IOS. Habituellement, une modification de la configuration, comme l'ajout de lignes supplémentaires à vos listes d'accès peut atténuer les effets de ce problème. La page Notifications et conseils de sécurité au sujet des produits Cisco contient des informations sur la détection des causes le plus probables et des solutions spécifiques.

Pour des informations supplémentaires, référez-vous à :

La taille de la mémoire ne prend pas en charge l'image logicielle de Cisco IOS

D'abord, vérifiez le secteur de logiciel de téléchargement (clients enregistrés seulement) pour la taille mémoire minimale pour l'ensemble de caractéristiques et la version que vous vous exécutez. Assurez-vous que la quantité de mémoire est suffisante. Les mémoires réquises sur Cisco.com sont les tailles recommandées par minimum pour le fonctionnement correct du routeur dans la plupart des réseaux de société. Les configurations requises pour la mémoire varient selon les protocoles, les tables de routage et les structures du trafic.

Bogue de fuite de mémoire

Si vous disposez de la sortie de la commande show memory allocating-process totals, une commande show memory summary, ou une commande show technical-support (en mode enable) de votre équipement Cisco, vous pouvez utiliser Output Interpreter (clients enregistrés uniquement) pour afficher les problèmes et solutions potentiels. Pour utiliser l’outil Output Interpreter (clients enregistrés uniquement) , vous devez être enregistré et connecté, et JavaScript doit être activé.

Une fuite de mémoire se produit lorsqu'un processus demande ou alloue de la mémoire, puis oublie de libérer (désallouer) la mémoire lorsqu'il a terminé avec cette tâche. En conséquence, le bloc mémoire est réservé jusqu'à ce que le routeur soit rechargé. Avec le temps, de plus en plus des blocs mémoire sont alloués par ce processus jusqu'à ce qu'il n'y ait plus de mémoire disponible. Selon la gravité de la situation, votre seule option peut être de recharger le routeur pour qu'il soit de nouveau opérationnel.

Il s'agit d'un bogue d'IOS. Pour l'éliminer, mettez à niveau vers la dernière version de la série (par exemple, si vous exécutez le logiciel Cisco IOS Version 11.2 (14), mettez à niveau vers la dernière image 11.2(x).

Si cela ne résout pas le problème, ou si vous ne souhaitez pas mettre à niveau le routeur, entrez la commande show processes memory à intervalles réguliers pendant une certaine période (par exemple, à quelques heures ou jours d'intervalle selon que la fuite est rapide ou lente). Vérifiez si la mémoire libre continue à diminuer et n'est jamais restituée. La vitesse à laquelle la mémoire libre disparaît dépend de la fréquence de l'occurrence de l'événement à l'origine de la fuite. Puisque la mémoire n'est jamais libérée, vous pouvez suivre le processus qui utilise la mémoire en prenant des clichés de la mémoire régulièrement. Gardez à l'esprit que les différents processus allouent et désallouent de la mémoire selon les besoins, et qu'il y aura donc des différences. Mais au fil du temps, vous devriez voir un processus qui consomme de plus en plus de mémoire (Remarque : il est normal que certains processus, tels que Border Gateway Protocol (BGP) ou le routeur Open Shortest Path First (OSPF) utilisent plus d'un méga-octet de mémoire ; ceci ne signifie pas qu'ils soient à l'origine d'une fuite).

Pour identifier le processus qui consomme plus de mémoire, comparez la colonne Holding de la commande show processes memory au fil du temps. Parfois, vous pouvez voir très clairement qu'un processus retient plusieurs méga-octets de mémoire. Parfois plusieurs instantanés sont nécessaires pour trouver le coupable. Lorsqu'une importante quantité de mémoire a été perdue, exécutez une commande show memory allocating-process totals ou la commande show memory summary pour obtenir des informations de dépannage supplémentaires. Contactez ensuite Cisco Technical Assistance Center (TAC) et fournissez les informations que vous avez collectées, ainsi qu'un résumé show technical-support du routeur.

L'outil Output Interpreter vous permet de recevoir une analyse de la sortie de la commande show memory allocating-process totals ou de la commande show memory summary.

Ce tableau donne les trois premières lignes de la sortie de la commande show memory summary :

Router>show memory summary 

            Head       Total (b)   Used (b)  Free (b)   Lowest (b)  Largest (b)
Processor   60AB4ED0   5550384     2082996   3467388    3464996     3454608
I/O         40000000   16777216    1937280   14839936   14839936    14838908

Total = quantité totale de mémoire disponible après que l'image du système est chargée et a établi ses structures de données.

Used = quantité de mémoire actuellement allouée.

Free = quantité de mémoire actuellement libre.

Lowest = la plus basse quantité de mémoire libre enregistrée par le routeur depuis la dernière fois qu'il a été amorcé.

Largest = le plus grand bloc mémoire libre actuellement disponible.

La commande show memory allocating-process totals contient les mêmes informations que les trois premières lignes de la commande show memory summary.

Voici ce que vous pouvez apprendre de la sortie de la commande show processes memory :

Router>show processes memory 
Total: 3149760, Used: 2334300, Free: 815460

PID   TTY   Allocated    Freed      Holding    Getbufs    Retbufs   Process
0     0     226548       1252       1804376    0          0         *Initialization*
0     0     320          5422288    320        0          0         *Scheduler*
0     0     5663692      2173356    0          1856100    0         *Dead*
1     0     264          264        3784       0          0         Load Meter
2     2     5700         5372       13124      0          0         Virtual Exec
3     0     0            0          6784       0          0         Check heaps
4     0     96           0          6880       0          0         Pool Manager
5     0     264          264        6784       0          0         Timers
6     0     2028         672        8812       0          0         ARP Input
7     0     96           0          6880       0          0         SERIAL A' detect
8     0     504          264        7024       0          0         ATM ILMI Input
9     0     0            0          6784       0          0         ILMI Process
10    0     136          0          6920       0          0         M32_runts pring
11    0     136          0          6920       0          0         Call drop procs
12    0     340          340        12784      0          0         ATMSIG Timer
13    0     445664       442936     13904      0          0         IP Input
14    0     2365804      2357152    17992      0          0         CDP Protocol
15    0     528          264        7048       0          0         MOP Protocols
16    0     188          0          9972       0          0         IP Background
17    0     0            1608       6784       0          0         TCP Timer
18    0     5852116      0          14236      0          0         TCP Protocols

Allocated = nombre total d'octets alloués par le processus depuis l'amorçage du routeur.

Freed = nombre total d'octets libérés par ce processus.

Holding = nombre total d'octets retenus par ce processus. C'est la colonne la plus importante pour le dépannage car elle montre la quantité de mémoire réelle attribuée à ce processus. La colonne Holding n'es pas forcément égale à Allocated moins Freed, car certains processus allouent un bloc mémoire qui est ensuite renvoyé au pool libre par un autre processus.

Processus *Dead*

Le processus *dead* n'est pas un processus réel. Il est là pour justifier la mémoire allouée par un autre processus qui s'est terminé. La mémoire allouée à ce processus est reprise par le noyau et renvoyée au pool de mémoire par le routeur lors cela est nécessaire. C'est ainsi qu'IOS gère la mémoire. Un bloc mémoire est considéré comme mort si le processus qui a créé le bloc se termine (n'est plus en cours d'exécution). Chaque bloc garde une trace de l'adresse et du PID du processus qui l'a créé. Pendant le comptage périodique de la mémoire, si le processus que le programmateur découvre à partir du PID d'un bloc ne correspond pas au processus que le bloc a mémorisé, le bloc est marqué comme mort.

Par conséquent, la mémoire marquée comme appartenant au processus *Dead* a été allouée sous le contrôle d'un processus qui n'est plus en cours d'exécution. Il est normal d'avoir une quantité importante de mémoire dans un tel état. Voici un exemple :

La mémoire est allouée lors de la configuration de la traduction d'adresses de réseau (NAT) pendant une session Telnet. Cette mémoire est justifiée sous le processus Telnet (« Virtual Exec »). Une fois que ce processus est terminé, la mémoire pour la configuration NAT est toujours utilisée. Ceci est illustré à l'aide du processus *dead*.

Vous pouvez voir dans quel contexte la mémoire a été allouée à l'aide de la commande show memory dead, dans la colonne « What » :

Router#show memory dead 
               Head   Total(b)    Used(b)    Free(b)  Lowest(b) Largest(b) 
      I/O    600000    2097152     461024    1636128    1635224    1635960 
  
          Processor memory 
  
 Address  Bytes Prev.    Next     Ref  PrevF   NextF   Alloc PC  What 
1D8310       60 1D82C8   1D8378     1                  3281FFE   Router Init 
2CA964       36 2CA914   2CA9B4     1                  3281FFE   Router Init 
2CAA04      112 2CA9B4   2CAAA0     1                  3A42144   OSPF Stub LSA RBTree 
2CAAA0       68 2CAA04   2CAB10     1                  3A420D4   Router Init 
2ED714       52 2ED668   2ED774     1                  3381C84   Router Init 
2F12AC       44 2F124C   2F1304     1                  3A50234   Router Init 
2F1304       24 2F12AC   2F1348     1                  3A420D4   Router Init 
2F1348       68 2F1304   2F13B8     1                  3381C84   Router Init 
300C28      340 300A14   300DA8     1                  3381B42   Router Init 

Si une fuite de mémoire est détectée et le processus *Dead* semble être celui consommant la mémoire, incluez une commande show memory dead dans les informations fournies au TAC Cisco.

Grande quantité de mémoire utilisée pour des processus normaux ou anormaux

C'est l'une des causes les plus difficiles à vérifier. Le problème se caractérise par une grande quantité de mémoire libre, mais une valeur faible dans la colonne« Lowest ». Dans ce cas, un événement normal ou anormal (par exemple, une grande instabilité de routage) fait que le routeur utilise une quantité exceptionnellement importante de mémoire de processeur pendant une courte période, pendant laquelle la mémoire s'est épuisée. Au cours de cette période, le routeur rapporte le message MALLOCFAIL. Il est possible que peu de temps après, la mémoire soit libérée et que le problème disparaisse (par exemple, si le réseau se stabilise). Le manque de mémoire peut également être dû à une combinaison de facteurs, comme :

  • Une fuite de mémoire qui a consommé une grande quantité de mémoire, puis une instabilité du réseau qui consomme toute la mémoire libre.

  • Le routeur n'a pas assez de mémoire dès le départ, mais le problème est découvert seulement pendant un événement réseau exceptionnel.

Si le routeur n'a pas été redémarré, entrez la commande show memory allocating-process totals (ou show memory summary si show memory allocating-process totals n'est pas disponible) et regardez les trois premières lignes. Les messages du journal peuvent fournir des indices au sujet du processus qui consommait beaucoup de mémoire :

Si une grande utilisation de la mémoire était due à un :

  • événement normal, la solution est d'installer plus de mémoire.

  • événement rare ou anormal, réglez le problème qui y est lié. Vous pouvez alors décider d'acheter de la mémoire supplémentaire pour une future « assurance ».

Problème ou bogue de fragmentation de mémoire

Cette situation signifie qu'un processus a consommé une grande quantité de mémoire de processeur, puis en a libéré la plus grande partie ou la totalité, en laissant des fragments de mémoire toujours alloués soit par ce processus, soit par d'autres processus ayant alloué la mémoire pendant le problème. Si le même événement se produit plusieurs fois, la mémoire peut se fragmenter en très petites parties, au point que les processus exigeant un plus grand bloc mémoire ne peuvent pas obtenir la quantité de mémoire dont ils ont besoin. Ceci peut affecter le fonctionnement du routeur dans la mesure où vous ne pouvez pas vous connecter au routeur et obtenir une invite si la mémoire est trop fragmentée.

Ce problème se caractérise par une valeur basse dans la colonne « Largest » (moins de 20 000 octets) de la commande show memory, mais par une valeur suffisante dans la colonne « Freed » (1 Mo ou plus), ou une autre disparité importante entre les deux colonnes. Cela peut se produire lorsque le routeur a très peu de mémoire, puisqu'il n'y a aucun sous-programme de défragmentation dans IOS.

Si vous suspectez une fragmentation de la mémoire, fermez certaines interfaces. Cette action peut libérer les blocs fragmentés. Si cela fonctionne, la mémoire se comporte normalement et il vous reste juste à ajouter plus de mémoire. Si la fermeture des interfaces n'aide pas, il peut s'agir d'un bogue. La meilleure ligne de conduite consiste à contacter votre représentant de l'assistance technique Cisco et à lui fournir les informations que vous avez collectées.

Défaillance d'allocation de mémoire en cours = niveau de priorité d'interruption

Cette situation peut être identifiée par le processus dans le message d'erreur. Si le processus est répertorié comme <niveau de priorité d'interruption>, comme dans l'exemple suivant, alors la défaillance d'allocation de mémoire est provoquée par un problème logiciel.

"%SYS-2-MALLOCFAIL: Memory allocation of 68 bytes failed from 0x604CEF48, 
pool Processor, alignment 0-Process= <interrupt level>, ipl= 3"

Il s'agit d'un bogue d'IOS. Vous pouvez utiliser Bug Toolkit (clients enregistrés uniquement) pour rechercher un ID de bogue logiciel correspondant à ce problème. Une fois le bogue logiciel identifié, mettez à niveau vers la version du logiciel Cisco IOS qui contient le correctif pour résoudre le problème.

Épuisement de la mémoire dû au téléchargement par listes d'accès utilisateur

Les listes d'accès peuvent consommer beaucoup de mémoire lorsqu'elles sont utilisées par les utilisateurs individuels. Les listes d'accès sont trop grandes pour être classifiées comme mini listes de contrôle d'accès (ACL) et sont maintenant compilées comme listes de contrôle d'accès turbo. Chaque fois que cela se produit, le processus TACL doit se déclencher et traiter la nouvelle ACL. Par conséquent, le trafic peut être autorisé ou refusé en fonction du temps de compilation et du temps de traitement disponible.

Les ACL compilées doivent être envoyées à XCM. Lorsque l'espace disponible est limité et une fois que la mémoire en est dépourvue, les messages sur la console apparaissent et la défragmentation de la mémoire démarre.

Voici la solution de contournement :

  • Utilisation d'ACL concises, moins de moteurs de contrôle des applications (ACE) qui se compileront en mini ACL, et qui réduiront la consommation de mémoire et puissance de traitement pour la compilation.

  • Utilisation d'ACL prédéfinies sur le routeur qui sont référencées par l'intermédiaire du filtre ID d'attribut RADIUS.

Problèmes identifiés

Problème 70x0 identifié lors du chargement du logiciel Cisco IOS de grande taille depuis de la mémoire Flash ou Netboot

Lorsqu'un processeur de routage 7000 (RP) amorce une image depuis de la mémoire Flash, il charge d'abord l'image ROM, puis l'image Flash dans la mémoire. L'ancien RP dispose uniquement de 16 Mo de mémoire, et les versions Enterprise de la version du logiciel Cisco IOS ultérieures à la version 11.0 dépassent 8 Mo non compressées. Par conséquent, lorsque vous chargez l'image depuis la ROM, puis la mémoire Flash, il se peut que la mémoire du RP 7000 s'épuise, ou la mémoire peut se fragmenter pendant le processus d'amorçage de sorte que le routeur affiche des messages d'erreur liés à la mémoire.

La solution est d'activer le démarrage rapide à partir du registre de configuration de sorte que le RP charge uniquement un sous-ensemble minimum de l'image logicielle de Cisco IOS dans la ROM, puis charge le logiciel Cisco IOS complet depuis la mémoire Flash. Pour activer le démarrage rapide, réglez le registre de configuration sur 0x2112. Cela accélérera également le processus de démarrage.

Entrée d'IP et découverte CiscoWorks UT

L'utilisation de la fonction de découverte UT de CiscoWorks peut réduire significativement la quantité de mémoire libre sur certains de vos routeurs. La commande show proc memory peut indiquer beaucoup de mémoire retenue par le processus « IP input ». C'est un cas particulier du problème Grande quantité de mémoire utilisée pour des processus normaux ou anormaux pour le processus « IP input »qui peut aussi causer un problème de Fragmentation de la mémoire si la faible quantité de mémoire disponible entraîne une fragmentation de la mémoire.

La fonction de découverte UT fait que la station d'administration de réseau envoie une série de pings pour toutes les adresses IP de chaque sous-réseau découvert. Les problèmes de mémoire sont provoqués par la taille croissante du cache à commutation rapide d'IP sur le routeur, parce que des entrées du cache sont créées pour chaque nouvelle destination. Puisque le masque utilisé pour les entrées du cache dépend de la façon dont il est mis en sous-réseau, la présence d'une adresse utilisant un masque de 32 bits (par exemple, une adresse de bouclage) dans un réseau principal fait que toutes les entrées pour ce réseau utilisent un masque de 32 bits. Ceci a pour conséquence de créer un nombre très importants d'entrées de cache, à l'aide d'une grande quantité de mémoire.

La meilleure solution est de désactiver la découverte UT. Pour ce faire, suivez les étapes ci-dessous :

  1. Accédez à C:\Program Files\CSCOpx\etc\cwsi\ANIServer.properties.

  2. Ajoutez « UTPingSweep=0 ».

  3. Redémarrez ANI.

La table de suivi des utilisateurs peut alors manquer quelques serveurs d'extrémité, ou ne plus être à jour (ceci pourrait être un problème avec une autre application Cisco appelée Outil d'enregistrement d'un nouvel utilisateur, qui se base sur UT), mais ceci n'affecte pas la découverte Campus Discovery qui utilise seulement le trafic SNMP. La commutation CEF peut également améliorer cette situation (avec CEF, le cache IP est créé à partir de la table de routage au démarrage). Référez-vous à Comment choisir le meilleur chemin de commutation de routeur pour le votre réseau pour plus d'informations sur CEF et d'autres chemins de commutation disponibles.

Il existe beaucoup d'autres applications qui peuvent entraîner des situations de mémoire basse semblables à celle-ci. Dans la plupart des cas, la cause d'origine du problème n'est pas le routeur, mais l'application elle-même. Normalement, vous devriez pouvoir empêcher ces générations de nombreux paquets en vérifiant la configuration de l'application.

Pas assez de mémoire partagée pour les interfaces

Certains routeurs (par exemple la gamme 2600, 3600, et 4000) exigent un minimum de mémoire I/O pour prendre en charge certains processeurs d'interface.

Si le routeur commence à manquer de mémoire partagée, même après un rechargement, il est nécessaire de procéder au retrait physique des interfaces pour résoudre le problème.

Sur les routeurs de la gamme 3 600, la commande de configuration globale memory-size iomem i/o-memory-percentage peut être utilisée pour réallouer le pourcentage de la DRAM pour l'utiliser pour la mémoire I/O et la mémoire du processeur. Les valeurs permises pour i/o-memory-percentage sont 10, 15, 20, 25 (par défaut), 30, 40 et 50. Un minimum de 4 Mo de mémoire est requis pour la mémoire I/O.

Afin de résoudre ce problème, référez-vous à :

Bogue de fuite de la mémoire tampon

Si vous avez la sortie d'une commande show buffers ou show technical-support (en mode enable) de votre équipement Cisco, vous pouvez utiliser Output Interpreter (clients enregistrés uniquement) pour afficher les problèmes et correctifs potentiels. Pour utiliser l’outil Output Interpreter (clients enregistrés uniquement) , vous devez être enregistré et connecté, et JavaScript doit être activé.

Lorsqu'un processus en a terminé avec une mémoire tampon, il devrait libérer cette mémoire. Une fuite de mémoire tampon se produit lorsque le code oublie de traiter une mémoire tampon, ou oublie de la libérer après qu'elle en ait terminé avec le paquet. En conséquence, le pool de mémoire tampon continue de se développer, car de plus en plus paquets sont coincés dans les mémoires tampon.

Vous pouvez identifier une fuite de mémoire tampon à l'aide de la commande show buffers. Certains des pools de mémoires tampon publiques devraient être anormalement grands avec peu de mémoire tampon libre. Après un rechargement, vous pouvez voir que la quantité de mémoire tampon libre ne s'approche jamais de la quantité totale de mémoire tampon.

L'outil Output Interpreter vous permet de recevoir une analyse de la sortie de show buffers.

Dans l'exemple ci-dessous, les mémoire tampon centrales du milieu sont affectées. La commande show buffers indique que presque 8 094 blocs de mémoire tampon sont utilisés et non libérés (8 122 au total moins 28 libres) :

Public buffer pools: Small buffers, 104 bytes (total 50, permanent 50): 
     50 in free list (20 min, 150 max allowed)
     403134 hits, 0 misses, 0 trims, 0 created
     0 failures (0 no memory)
Middle buffers, 600 bytes (total 8122, permanent 200):
     28 in free list (10 min, 300 max allowed)
     154459 hits, 41422 misses, 574 trims, 8496 created
Big buffers, 1524 bytes (total 50, permanent 50):
     50 in free list (5 min, 150 max allowed)
     58471 hits, 0 misses, 0 trims, 0 created
     0 failures (0 no memory)
VeryBig buffers, 4520 bytes (total 10, permanent 10): 
     10 in free list (0 min, 100 max allowed)
     0 hits, 0 misses, 0 trims, 0 created
     0 failures (0 no memory)
Large buffers, 5024 bytes (total 0, permanent 0)
     0 in free list (0 min, 10 max allowed) 
     0 hits, 0 misses, 0 trims, 0 created  
     0 failures (0 no memory)
Huge buffers, 18024 bytes (total 0, permanent 0): 
     0 in free list (0 min, 4 max allowed)
     0 hits, 0 misses, 0 trims, 0 created  
     0 failures (0 no memory) 

c'est un bogue du logiciel Cisco IOS. Mettez à niveau vers la dernière version de votre série pour corriger des bogues de fuite de mémoire tampon identifiées (par exemple, si vous exécutez le Logiciel Cisco IOS Version 11.2(14), mettez à niveau vers la dernière image 11.2(x). Si cela n'aide pas, ou s'il n'est pas possible de mettre à niveau le routeur, émettez les commandes suivantes pour le pool qui pose problème lorsque le routeur manque de mémoire. Ces commandes afficheront les informations supplémentaires au sujet du contenu des mémoires tampon :

  • show buffer old : indique les mémoires tampon allouées depuis plus d'une minute

  • show buffer pool  (small - middle - big - verybig - large - huge) : donne un résumé des mémoires tampon pour le pool spécifié

  • show buffer pool  (small - middle - big - verybig - large - huge) dump : montre un vidage hex/ASCII de toutes les mémoires tampon en service d'un pool donné.

Référez-vous à Dépanner les fuites de mémoire tampon pour des détails supplémentaires.

Le routeur commence à manquer de mémoire rapide

Ce problème est spécifique à la gamme 7500. Si le routeur manque de mémoire « rapide », il utilisera sa RAM dynamique principale (DRAM) à la place. Aucune action n'est requise.

IPFAST-4-RADIXDELETE : Error trying to delete prefix entry [IP_address]/[dec] (expected [hex], got [hex])

L' IPFAST-4-RADIXDELETE : Le message d'erreur Error trying to delete prefix entry [IP_address]/[dec] (expected [hex], got [hex]) indique que le table de cache à commutation rapide du routeur en mémoire est altérée. Lorsque le routeur tente d'effacer la table de cache en fonctionnement normal ou si la commande clear ip cache est entrée, le système ne parvient pas à supprimer les entrées à cause d'une corruption de la mémoire. Lorsque le routeur ne parvient pas à effacer une telle entrée, le message IPFAST-4-RADIXDELETE est rapporté.

Afin de résoudre un problème de corruption de la table de cache, il est nécessaire d'effectuer un redémarrage du routeur. Un redémarrage redécoupera les structures de mémoire du système et permettra au cache rapide de se reconstruire sans corruptions.

%SYS-2-CHUNKEXPANDFAIL : Could not expand chunk pool for TACL Bitmap. No memory available

Le message d'erreur %SYS-2-CHUNKEXPANDFAIL: Could not expand chunk pool for TACL Bitmap. No memory available signifie qu'il ne reste pas assez de mémoire processeur pour augmenter la taille du pool de blocs spécifié. Il est probablement provoqué par un processus qui se comporte anormalement.

La solution est de capturer périodiquement (selon la fréquence du problème) la sortie de ces commandes de sorte que l'utilisation mémoire de routeur puisse être surveillée :

  • show processes memory sorted

  • show memory statistics

  • show memory allocating-process totals

Résumé du dépannage

Défaillances d'allocation de mémoire pour le pool « Processeur »

Suivez ces étapes.

  1. Vérifiez les configurations requises pour votre version du logiciel Cisco IOS ou de l'ensemble de fonctionnalités.

  2. Si possible, mettez à niveau vers la dernière version du logiciel Cisco IOS de votre série de versions.

  3. Recherchez une grande quantité de mémoire utilisée pour des processus normaux ou anormaux. S'il y a lieu, ajoutez plus de mémoire.

  4. Vérifiez s'il s'agit d'une fuite ou d'une fragmentation (fuite de mémoire tampon sur les routeurs haute gamme).

  5. Collectez les informations appropriées et entrez en contact avec le TAC.

Défaillances d'allocation de mémoire pour le pool « I/O » (« Processeur » sur les routeurs haute gamme, « PCI » sur la gamme 7200)

Suivez ces étapes :

  1. Vérifiez les configurations requises en matière de mémoire partagée (voir Mémoire partagée insuffisante pour les interfaces).

  2. Si possible, mettez à niveau vers la dernière version du logiciel Cisco IOS de votre série de versions.

  3. Déterminez quel pool de mémoires tampon est affecté, collectez les informations appropriées, et entrez en contact avec le TAC Cisco.

Informations à collecter si vous ouvrez une demande de service TAC

Si vous avez toujours besoin d'aide après avoir suivi les étapes de dépannage ci-dessus et voulez ouvrir une demande de service TAC (clients enregistrés uniquement), soyez sûr d'inclure les informations suivantes :
  • Dépannage exécuté avant d'ouvrir le cas
  • Sortie show technical-support (dans le mode enable si possible) - plusieurs captures pour montrer comment l'utilisation que le routeur fait de la mémoire a changé avec le temps.
  • sortie show log ou captures de console si disponibles
  • show memory allocating-pool totals ou show memory summary - plusieurs captures pour montrer comment l'utilisation que le routeur fait de la mémoire a changé avec le temps
Vous pourriez devoir utiliser les méthodes de la section Erreur « Unable to Create EXEC » ou lorsque la console ne répond pas pour obtenir les informations. Plusieurs captures des informations peuvent être nécessaires pour déterminer la cause du problème. Comme il existe plusieurs types de fuites de mémoire, l'ingénieur TAC peut avoir besoin d'informations supplémentaires une fois le type de fuite de mémoire identifié. Si vous suspectez un problème de fragmentation de mémoire, veuillez inclure :
  • show memory free
  • show memory bigger
Si vous suspectez une fuite de mémoire tampon, veuillez inclure :
  • show buffer old
  • show buffer pool  (small - middle - big - verybig - large - huge) : pour le pool qui pose problème. Par exemple, si vous suspectez une fuite dans le pool central, incluez la commande show buffer pool middle
  • show buffer pool (small - middle - big - verybig - large - huge) packet : pour le pool qui pose problème. Par exemple, si vous suspectez une fuite dans le pool central, incluez la commande show buffer pool middle packet
Vous pouvez joindre des informations à votre cas en les téléchargeant à l'aide de TAC Service Request Tool ( clients enregistrés uniquement). Si vous ne pouvez pas accéder à Service Request Tool, vous pouvez envoyer les informations en pièce jointe dans un e-mail à attach@cisco.com avec votre numéro de cas dans le sujet du message pour joindre les informations pertinentes à votre cas.

Remarque: Veuillez ne pas le recharger manuellement ou arrêter, puis remettre sous tension le routeur avant de collecter les informations ci-dessus à moins que cela ne soit nécessaire pour dépanner des problèmes de mémoire, car cela peut entraîner la perte d'informations importantes nécessaires pour déterminer la cause d'origine du problème. Votre ingénieur TAC peut suggérer de recharger le routeur et collecter les informations supplémentaires après le rechargement lors du dépannage, selon la cause suspectée.

Conversations connexes de la communauté de soutien de Cisco

Le site Cisco Support Community est un forum où vous pouvez poser des questions, répondre à des questions, faire part de suggestions et collaborer avec vos pairs.


Informations connexes


Document ID: 6507