Introdução
Este documento descreve como solucionar problemas de vazamentos de memória do MallocLite nas plataformas do software Cisco IOS®.
Ele também especifica as informações que você deve reunir antes de abrir um caso no Cisco Technical Assistance Center (TAC) ou recarregar o dispositivo. Colete as saídas mencionadas neste documento e anexe-as ao caso TAC para ajudar a acelerar a resolução de problemas.
Informações de Apoio
O MallocLite é usado pelo gerenciador de memória para alocar pedaços de memória pequenos e de tamanho fixo, conhecidos como blocos, para alocações menores ou iguais a 128 bytes. Alocações de memória pequenas não têm a sobrecarga de um cabeçalho de bloco para cada alocação. Este recurso é suportado apenas para pools de memória de processador.
Cada cabeçalho de bloco de memória ocupa cerca de 48 bytes de memória, e o menor bloco ocupa cerca de 24 bytes. Com uma abordagem tradicional no software Cisco IOS para cada alocação, você consumiria pelo menos 72 (48 + 24) bytes de memória, mesmo que precise alocar apenas 8 bytes de dados reais.
Com o MallocLite, essa sobrecarga pode ser reduzida pelo uso de blocos. Ainda há sobrecarga, pois os blocos precisam ser gerenciados. No entanto, como os blocos são de tamanho fixo, eles são gerenciados de forma diferente dos blocos e a sobrecarga é menor.
É responsabilidade dos aplicativos que usam a memória MallocLite para liberá-la corretamente. MallocLite mascara o usuário da memória.
Troubleshooting
Observação: o Cisco CLI Analyzer (somente clientes registrados) suporta determinados comandos show. Use o Cisco CLI Analyzer para visualizar uma análise da saída do comando show.
Identificar o aplicativo responsável pelo vazamento
Geralmente é difícil identificar um bug existente se você pesquisar somente pela palavra-chave malloclite.
Este exemplo mostra que o processo *MallocLite* está mantendo uma quantidade anormal de memória:
#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*
Você precisa identificar a aplicação exata que é responsável pelo vazamento. Três métodos de identificação possíveis são:
- Decodifique o PC alocador.
- Investigue as estatísticas de memória do MallocLite.
- Desative o MallocLite.
Decodificar PC Alocador
Mesmo com o MallocLite ativado, você pode ver normalmente qual função solicitou a memória. A saída do comando show memory allocating-process totals pode mostrar valores diferentes do PC mesmo que o nome relatado seja 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
Um engenheiro do TAC da Cisco pode decodificar os valores do PC no topo da lista (com o total mais alto). Isso ajuda a identificar o aplicativo que tem o vazamento de memória.
Investigar Estatísticas de Memória MallocLite
Entre as melhorias adicionadas no Cisco IOS Software Release 15.1T estava uma nova CLI que exibe o resumo da memória MallocLite alocada por cada PC. O comando show memory lite-chunks pode ajudá-lo a identificar aplicativos que estão usando uma grande quantidade de blocos MallocLite.
show memory lite-chunks { statistics | totals } { summary { pool | { all | pool } } }
Consulte a referência de comando para obter detalhes do 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
Exemplos de saída desse comando incluem:
#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
Novamente, o engenheiro do TAC pode decodificar os valores do PC com o total mais alto e identificar o aplicativo que está vazando a memória.
Desabilitar MallocLite
O recurso MallocLite é habilitado por padrão. Para investigar o vazamento de MallocLite, você pode desativar o MallocLite:
(config)#no memory lite
A memória vazada ainda estará sob MallocLite até o próximo recarregamento; no entanto, você pode começar a monitorar mais vazamentos com os comandos show processes memory sorted e show memory allocating-process totals. Os vazamentos agora aparecerão no processo real.
Se o dispositivo estiver com pouca memória, você deverá salvar a configuração e recarregar o dispositivo para liberar a memória:
#wr
#reload
A memória pode se esgotar novamente com o tempo, então use os comandos show processes memory sorted e show memory allocating-process totals para monitorar o uso da memória a partir desse ponto em diante.
Note: Se você efetivamente desativar o MallocLite com o comando no memory lite e recarregar o dispositivo, a saída do comando show memory lite-chunks estará vazia.
Consulte a referência de comando para obter detalhes do comando memory lite.