Introducción
Este documento describe cómo resolver problemas de pérdidas de memoria MallocLite en las plataformas de software Cisco IOS®.
También especifica la información que debe recopilar antes de abrir un caso del centro de asistencia técnica Cisco Technical Assistance Center (TAC) o de volver a cargar el dispositivo. Recopile los resultados mencionados en este documento y adjúntelos al caso del TAC para ayudar a acelerar la resolución de problemas.
Antecedentes
El administrador de memoria utiliza MallocLite para asignar fragmentos de memoria pequeños de tamaño fijo, conocidos como fragmentos, para asignaciones menores o iguales a 128 bytes. Las asignaciones de memoria pequeñas no tienen la sobrecarga de un encabezado de bloque para cada asignación. Esta característica sólo se admite para grupos de memoria del procesador.
Cada encabezado de bloque de memoria toma alrededor de 48 bytes de memoria, y el bloque más pequeño toma alrededor de 24 bytes. Con un enfoque tradicional en el software del IOS de Cisco para cada asignación, consumiría al menos 72 (48 + 24) bytes de memoria, incluso si necesita asignar sólo 8 bytes de datos reales.
Con MallocLite, esta sobrecarga se puede reducir mediante el uso de fragmentos. Todavía hay cierta sobrecarga, porque los fragmentos tienen que ser administrados. Sin embargo, dado que los fragmentos tienen un tamaño fijo, se administran de una manera diferente que los bloques, y la sobrecarga es menor.
Es responsabilidad de las aplicaciones que utilizan la memoria MallocLite para liberarla adecuadamente. MallocLite oculta al usuario la memoria.
Troubleshoot
Nota: Cisco CLI Analyzer (sólo clientes registrados) admite ciertos comandos show. Utilice el Analizador de Cisco CLI para ver un análisis de los resultados del comando show.
Identificar la aplicación responsable de la fuga
Por lo general, es difícil identificar un error existente si busca sólo por la palabra clave malloclite.
Este ejemplo muestra que el proceso *MallocLite* contiene una cantidad anormal de memoria:
#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*
Debe identificar la aplicación exacta responsable de la fuga. Tres métodos de identificación posibles son:
- Decodificar equipo asignador.
- Investigue las estadísticas de memoria de MallocLite.
- Desactive MallocLite.
Decodificar equipo asignador
Incluso con MallocLite activado, normalmente se puede ver qué función solicita la memoria. El resultado del comando show memory allocation-process totals podría mostrar diferentes valores de PC aunque el nombre notificado sea 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 ingeniero del TAC de Cisco puede descodificar los valores de PC de la parte superior de la lista (con el total más alto). Esto ayuda a identificar la aplicación que tiene la pérdida de memoria.
Investigar estadísticas de memoria MallocLite
Entre las mejoras añadidas en la versión 15.1T del software Cisco IOS se encontraba una nueva CLI que muestra el resumen de la memoria MallocLite asignada por cada PC. El comando show memory lite-chunks puede ayudarlo a identificar las aplicaciones que están utilizando una gran cantidad de bloques de MallocLite.
show memory lite-chunks { statistics | totals } { summary { pool | { all | pool } } }
Consulte la referencia de comandos para obtener detalles del comando 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
Entre los ejemplos de salida de este comando se incluyen:
#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
Una vez más, el ingeniero del TAC puede descodificar los valores de PC con el total más alto e identificar la aplicación que está perdiendo la memoria.
Desactivar MallocLite
La función MallocLite está activada de forma predeterminada. Para investigar la fuga de MallocLite, puede inhabilitar MallocLite:
(config)#no memory lite
La memoria filtrada seguirá bajo MallocLite hasta la próxima recarga; sin embargo, puede comenzar a monitorear más fugas con los comandos show processes memory sorted y show memory allocation-process totals. Las filtraciones aparecerán ahora bajo el proceso real.
Si el dispositivo tiene poca memoria, debe guardar la configuración y recargar el dispositivo para liberar la memoria:
#wr
#reload
La memoria podría agotarse nuevamente con el tiempo, así que utilice los comandos show processes memory sorted y show memory allocation-process totals para monitorear el uso de la memoria desde ese punto en adelante.
Nota: Si inhabilita MallocLite de manera efectiva con el comando no memory lite y recarga el dispositivo, la salida del comando show memory lite-chunks estará vacía.
Consulte la referencia de comandos para obtener detalles del comando memory lite.