Introdução
Este documento descreve a solução para instâncias do sessmgr que entram no estado WARN devido a alto acsmgr_icsr_frwk_instance_chkpt_falied()
uso do processo.
Descrição do problema
Plataforma ASR5500
Versão do SW: 21.27.4 e 21.19.10
Instâncias do gerenciador de sessões em estado de aviso devido ao alto consumo de memória em acsmgr_icsr_frwk_instance_chkpt_falied()
funcionar quando a recuperação de sessão estiver desativada:
[local]ASR5500# show task resources | grep -v good
task cputime memory files sessions
cpu facility inst used allc used alloc used allc used allc S status
----------------------- ----------- ------------- --------- ------------- ------
1/0 sessmgr 13 26% 100% 930.8M 900.0M 37 500 4643 12000 I warn
1/0 sessmgr 36 32% 100% 938.8M 900.0M 39 500 5155 12000 I warn
1/0 sessmgr 53 29% 100% 937.8M 900.0M 40 500 4916 12000 I warn
1/0 sessmgr 56 29% 100% 930.2M 900.0M 41 500 4649 12000 I warn
1/0 sessmgr 83 35% 100% 970.2M 900.0M 40 500 5382 12000 I warn
1/0 sessmgr 90 24% 100% 931.3M 900.0M 42 500 4621 12000 I warn
1/0 sessmgr 130 28% 100% 935.0M 900.0M 40 500 4907 12000 I warn
1/0 sessmgr 141 26% 100% 936.7M 900.0M 37 500 4917 12000 I warn
1/0 sessmgr 145 23% 100% 933.9M 900.0M 39 500 4883 12000 I warn
1/0 sessmgr 174 26% 100% 927.4M 900.0M 37 500 4620 12000 I warn
1/0 sessmgr 188 31% 100% 963.0M 900.0M 40 500 5305 12000 I warn
1/0 sessmgr 223 26% 100% 933.5M 900.0M 38 500 4631 12000 I warn
Aggregate consumption per proc:
-------- ------------------------------------------ -------------- -------------- -------------- --------- ---------
| Nr | Process | Similar | Total Bytes | Human Bytes | Percent | % Acum |
======== ========================================== ============== ============== ============== ========= =========
| 1 | acsmgr_icsr_frwk_instance_chkpt_falied() | 757 | 108301860 | 103.3 MB | 13.95% | 13.95% |
| 2 | egtpc_allocate_peer_rec() | 89 | 77599472 | 74.0 MB | 10.00% | 23.95% |
| 3 | sn_slist_dnode_alloc() | 471 | 64427392 | 61.4 MB | 8.30% | 32.25% |
| 4 | sessmgr_allocate_callline() | 156 | 48601944 | 46.4 MB | 6.26% | 38.51% |
| 5 | sn_aaa_buffer_alloc_more_type() | 45 | 34836120 | 33.2 MB | 4.49% | 43.00% |
[local]ASR5500# show task resources | grep -v good
Session Recovery Status:
Overall Status : Not Enabled
Last Status Update : 8 seconds ago
Análise
Para isolar se a grande quantidade de assinantes totais dispara o processo acsmgr_icsr_frwk_instance_chkpt_falied()
para ser utilizado em excesso, uma instância do sessmgr ocupada é executada e é confirmado que a utilização da memória do sessmgr não diminuiu:
[local]ASR5500> show task resources facility sessmgr instance 10
task cputime memory files sessions
cpu facility inst used allc used alloc used allc used allc S status
----------------------- ----------- ------------- --------- ------------- ------
8/0 sessmgr 10 20% 100% 981.8M 900.0M 43 500 4142 12000 I warn
Total 1 20.20% 981.8M 43 4142
[local]ASR5500> task sessmgr instance 10 busy-out
[local]ASR5500> show task resources facility sessmgr instance 10
task cputime memory files sessions
cpu facility inst used allc used alloc used allc used allc S status
----------------------- ----------- ------------- --------- ------------- ------
8/0 sessmgr 10 19% 100% 979.7M 900.0M 42 500 3946 12000 B warn
Total 1 19.35% 979.7M 42 3946
[local]ASR5500> task sessmgr instance 10 enable
[local]ASR5500> show task resources facility sessmgr instance 10
task cputime memory files sessions
cpu facility inst used allc used alloc used allc used allc S status
----------------------- ----------- ------------- --------- ------------- ------
8/0 sessmgr 10 17% 100% 979.8M 900.0M 40 500 4141 12000 I warn
Total 1 17.33% 979.8M 40 4141
Nos logs, quando um ocupado-out é executado em uma das instâncias do sessmgr afetadas, ele diminui o número de sessões usadas, mas a alocação de memória usada ainda permanece alta e mostra que faz com que a instância do sessmgr esteja no estado WARN.
Após uma investigação mais aprofundada, acsmgr_icsr_frwk_instance_chkpt_falied()
é chamada enquanto as informações do ponto de verificação são processadas. Há operações de adição/atualização/exclusão de lista nesta função que não funcionam como esperado quando a recuperação de sessão está desabilitada e esta é a razão para o aumento do consumo de memória. A memória usada aqui é acumulada nesse cenário com o tempo. Esse comportamento ocorre somente no cenário em que o require session recovery
não está configurado. A memória acumulada a processar acsmgr_icsr_frwk_instance_chkpt_falied()
não é liberado quando (não require session recovery
) que potencialmente causa a fuga de memória."
Solução
Implemente a recuperação da sessão para resolver esse problema.
Procedimento
Etapa 1. No prompt do modo Exec, verifique se o recurso de recuperação de sessão está habilitado através das licenças de uso de sessão e recurso no sistema com o comando show license info
comando. Se o status atual do recurso Recuperação de sessão for Desabilitado, você não poderá habilitar esse recurso até que uma chave de licença seja instalada no sistema.
Etapa 2. Use este exemplo de configuração para habilitar a recuperação de sessão.
configure
require session recovery
end
Este recurso não entrará em vigor até que o sistema seja reiniciado.
Etapa 3. Salve sua configuração conforme descrito em Verificando e salvando sua configuração.
Etapa 4. Execute uma reinicialização do sistema com o comando reload
comando. Este é o prompt exibido:
Confirme seu desejo de reiniciar o sistema e entre Yes
.
O sistema, quando reiniciado, ativa a recuperação de sessão e cria todas as tarefas espelhadas no "modo de espera", realiza reservas de placa de processamento de pacotes e outras operações automaticamente.
Etapa 5. Depois que o sistema for reiniciado, você deverá verificar a preparação do sistema para suportar esse recurso, conforme descrito em Exibição do Status de Recuperação da Sessão. Usuários mais avançados podem optar por inserir o require session recovery
sintaxe de comando em um arquivo de configuração que já existe com um editor de texto ou outros meios e, em seguida, aplique manualmente o arquivo de configuração. Tenha cuidado ao fazer isso, para garantir que esse comando seja colocado entre as primeiras linhas de qualquer arquivo de configuração que já exista; ele deve aparecer antes da criação de qualquer contexto não local.