Introdução
Este documento descreve dicas gerais de Troubleshooting para coletar informações adicionais para um problema de vazamento de memória.
Pré-requisitos
Requisitos
A Cisco recomenda que você tenha conhecimento básico destes tópicos:
- Conhecimento básico do Cisco IOS® XE
- Conhecimento básico no Embedded Event Manager (EEM)
Componentes Utilizados
Este documento não se restringe a versões de software e hardware específicas. Ele se aplica a qualquer plataforma de roteamento Cisco IOS XE como ASR1000, ISR4000, ISR1000, Cat8000 ou Cat8000v.
As informações neste documento foram criadas a partir de dispositivos em um ambiente de laboratório específico. Todos os dispositivos utilizados neste documento foram iniciados com uma configuração (padrão) inicial. Se a rede estiver ativa, certifique-se de que você entenda o impacto potencial de qualquer comando.
Informações de Apoio
Neste documento, você pode encontrar registros comuns que o dispositivo gera no caso de uma alta utilização de memória.
Além disso, você pode ver como se beneficiar do recurso Embedded Event Manager para ajudar o TAC a monitorar e obter dados em situações em que o roteador IOS XE está frequentemente ficando sem memória.
A finalidade deste documento não é explicar detalhadamente os procedimentos de identificação e solução de problemas, se disponíveis, mas apenas as referências a guias de solução de problemas mais detalhados são fornecidas.
Sintomas de roteadores IOS XE com memória insuficiente
Ao lidar com problemas de alto uso de memória, normalmente, você vê uma mensagem de log indicando que o limite de advertência de 85% foi atingido. Esse valor varia de acordo com a versão. Logs diferentes são gerados dependendo de onde o sistema encontrou o problema:
Problemas de TCAM:
CPP_FM-3-CPP_FM_TCAM_WARNING
IOSd (plano de controle):
SYS-2-MALLOCFAIL
SYS-2-CHUNKEXPANDFAIL
SYS-4-CHUNKSIBLINGSEXCEED
QFP (Plano de dados):
QFPOOR-4-LOWRSRC_PERCENT_WARN
QFPOOR-4-TOP_EXMEM_USER
CPPEXMEM-3-NOMEM
CPPEXMEM-3-TOPUSER
Sistema de arquivos temporários (TMPFS):
PLATFORM-3- ELEMENT_TMPFS_WARNING
Log geral do sistema (requer isolamento):
PLATFORM-4-ELEMENT_WARNING
PLATFORM-3-ELEMENT_CRITICAL
Note: Os aprimoramentos de registro estão disponíveis na versão 16.12 e posterior.
Informações de que o TAC precisa para a triagem inicial
show clock
show version
show platform resources
show platform software status control-processor brief
show process memory sorted
show memory statistics
show memory allocating-process totals
show process memory platform sorted
show logging
- Em caso de recarregamento inesperado devido a uma condição de memória baixa:
relatório de sistema/arquivo principal
- Gráfico de utilização de memória ao longo do tempo.
Anexar um show tech é desejável, útil para o TAC e você pode se beneficiar da automação que o TAC desenvolveu para ajudá-lo a encontrar problemas mais rapidamente.
As condições que levam a uma alta utilização de memória são sempre relacionadas ao software. No entanto, nem todas as instâncias de alto uso de memória são inesperadas. É importante considerar a DRAM disponível e a combinação de recursos em execução no dispositivo.
A solução de problemas de alta utilização de memória é mais suave, mais eficaz e com uma melhor interação do TAC se você usar o Radkit. Essa ferramenta, desenvolvida pela Cisco, fornece ao TAC uma maneira altamente segura e fácil de acessar os dispositivos selecionados na sua rede. Para obter mais informações, visite: Cisco RADKit
Note: Verifique se você está executando uma versão com suporte. Procure o documento End-of-Sale (Fim das vendas) e End-of-Life (Fim da vida útil) para a versão. Se necessário, mude para uma versão que esteja atualmente em Software Maintenance Releases. Caso contrário, o TAC pode ser limitado nas opções de solução de problemas.
Para obter um documento completo sobre solução de problemas de memória, consulte estes guias:
No ISR4K: Guia de solução de problemas de memória para ISRs Cisco 4000 Series.
No ASR1K: Guia de solução de problemas de memória do roteador ASR 1000 Series.
Entendendo o uso elevado de memória
Nos roteadores Cisco IOS XE, a DRAM é um dos recursos mais importantes que suporta a funcionalidade principal. A DRAM é utilizada para armazenar diferentes tipos de dados e informações de processos/recursos que são essenciais para as operações do plano de controle e do plano de dados.
Os principais usos da DRAM em roteadores IOS XE incluem:
Memória IOSd (estruturas do plano de controle): Armazena informações relacionadas a processos relacionadas ao plano de controle do dispositivo, como: informações/protocolos de roteamento, estruturas de gerenciamento de rede, configurações de sistema e informações de recursos.
Memória QFP (estruturas de plano de dados): Armazena tudo em torno de operações QFP manipuladas pelo microcódigo, como estruturas-chave de recursos armazenados no QFP, instruções de microcódigo e instruções de encaminhamento.
Sistema de arquivos temporários (TMPFS): Montado na DRAM e gerenciado pelo IOSd, o TMPFS serve como uma área de armazenamento de acesso rápido para os arquivos necessários aos processos. Caso esses arquivos sejam persistentes, eles são movidos para um disco rígido/flash de inicialização. Ele melhora o desempenho do sistema reduzindo os tempos de leitura/gravação de dados temporários.
Processos gerais sendo executados no kernel do Linux: Como o IOS XE opera em um kernel baseado em Linux, a DRAM também suporta vários processos do sistema que são executados sobre esse kernel.
A alta utilização de memória superior a 85% geralmente indica um consumo significativo de DRAM, o que pode afetar o desempenho do roteador. Esse uso elevado pode ser resultado de demandas legítimas, como o armazenamento de tabelas de roteamento extensas ou a ativação de recursos intensivos. No entanto, ele também pode sinalizar problemas como o gerenciamento ineficiente da memória por determinados recursos ou vazamentos de memória, em que a memória não é liberada corretamente de volta para o sistema após o uso.
Ao monitorar a utilização de memória na memória IOSd, memória QFP, TMPFS e processos gerais do Linux, você e o TAC podem identificar possíveis problemas antecipadamente.
EEM para monitorar a utilização de memória
Para solucionar problemas de memória, o TAC precisa coletar um conjunto de comandos durante um período de tempo para identificar o processo ofensivo. Às vezes, depois que o processo culpado é identificado, comandos específicos adicionais são necessários, tornando a solução de problemas de memória um dos tipos de solução de problemas mais demorados.
Para facilitar essa solução de problemas, você pode usar o recurso EEM para monitorar e coletar informações automaticamente. Há duas considerações principais para escrever o script do EEM: acionador e comandos a serem coletados.
Acionadores
Padrão. Você pode usar o padrão da seção Sintomas de roteadores Cisco IOS XE com memória insuficiente. O formato é semelhante a este:
event syslog pattern <pattern> ratelimit 300 maxrun 180
Uma das considerações ao usar um padrão como um disparador é que o log é gerado quando o limite de aviso é atingido, dependendo da taxa de consumo de memória, tentando fazer isso manualmente, você ou o TAC não têm tempo suficiente para uma solução de problemas mais detalhada.
Temporizador cron. Exemplo de um temporizador cron a ser ativado a cada 30 minutos:
entrada cron de meia hora do nome cron do temporizador de evento "*\30 * * * *"
Uma das vantagens de um temporizador cron sobre um padrão é que você não precisa esperar até que o dispositivo fique quase sem recursos de memória para coletar informações. Dependendo da taxa de consumo de memória, com monitoramento e informações adequados, o TAC pode identificar o processo ofendido antes de atingir o limite de aviso.
Note: As opções Ratelimit e maxrun são usadas para garantir que todo o conjunto de saídas seja coletado. Eles também ajudam a evitar ruído adicional ou ativação de EEM em situações em que vários registros aparecem em um curto período de tempo.
Exemplos de EEM com comandos gerais para triagem inicial:
configure terminal
event manager applet TAC_EEM authorization bypass
event syslog pattern " PLATFORM-4-ELEMENT_WARNING" ratelimit 300 maxrun 180
action 0.1 cli command "enable"
action 0.2 cli command "term exec prompt timestamp"
action 0.3 cli command "term length 0"
action 0.4 cli command "show process memory platform sorted | append bootflash:TAC_EEM.txt"
action 0.5 cli command "show processes memory platform sorted location chassis 1 R0 | append bootflash:TAC_EEM.txt"
action 0.9 cli command "show platform resources | append bootflash:TAC_EEM.txt"
action 1.0 cli command "show platform software status control-processor brief | append bootflash:TAC_EEM.txt"
action 1.1 cli command "show clock | append bootflash:TAC_EEM.txt"
action 1.3 cli command "show platform software process memory chassis active r0 all sorted | append bootflash:TAC_EEM.txt"
action 1.5 cli command "show process memory platform accounting | append bootflash:TAC_EEM.txt"
Monitorar diariamente com um cronômetro cron:
configure terminal
event manager applet TAC_EEM2 authorization bypass
event timer cron name DAYLY cron-entry "0 0 * * *"
action 0.1 cli command "enable"
action 0.2 cli command "term exec prompt timestamp"
action 0.3 cli command "term length 0"
action 0.4 cli command "show process memory platform sorted | append bootflash:TAC_EEM2.txt"
action 0.5 cli command "show processes memory platform sorted location chassis 1 R0 | append bootflash:TAC_EEM2.txt"
action 0.6 cli command "show processes memory platform sorted location chassis 2 R0 | append bootflash:TAC_EEM2.txt"
action 0.9 cli command "show platform resources | append bootflash:TAC_EEM2.txt"
action 1.0 cli command "show platform software status control-processor brief | append bootflash:TAC_EEM2.txt"
action 1.1 cli command "show log | append bootflash:TAC_EEM2.txt"
action 1.2 cli command "show clock | append bootflash:TAC_EEM2.txt"
action 1.3 cli command "show platform software process memory chassis active r0 all sorted | append bootflash:TAC_EEM2.txt"
action 1.5 cli command "show process memory platform accounting | append bootflash:TAC_EEM2.txt"
Para obter uma lista mais abrangente de comandos, consulte os guias da seção Informações sobre as necessidades do TAC para a triagem inicial.
Arquivo de núcleo
Quando a utilização da memória atinge um nível crítico, é provável que o sistema operacional force um travamento para se recuperar dessa condição, gerando um relatório do sistema que contenha um arquivo de núcleo.
O arquivo de núcleo é o dump de memória completo de um processo específico que travou em um determinado momento. Esse arquivo central é crítico para que o TAC inspecione a memória e analise o código-fonte para entender as condições e os possíveis motivos do recarregamento/travamento inesperado do processo.
O arquivo central ajuda o TAC e os desenvolvedores a encontrar a causa raiz do problema, depurar e corrigir o problema.
Note: Embora o TAC e os desenvolvedores se esforcem para obter uma causa raiz, há momentos em que o travamento foi uma consequência de um evento de rede ou um problema de temporização que torna virtualmente impossível reproduzi-lo no laboratório.
Para obter mais informações sobre recarregamentos inesperados e como recuperar um arquivo de núcleo, consulte Troubleshooting de Recarregamentos Inesperados em Plataformas Cisco IOS® com TAC.