Introdução
tacacsd é um processo XR do IOS que está associado ao serviço AAA do Tacacs. Este documento discute um bug de software e seus sintomas que podem fazer com que os roteadores que executam o IOS XR versão 4.2.X ou inferior observem alta utilização constante da CPU.
Pré-requisitos
Não existem requisitos específicos para este documento.
Componentes Utilizados
O problema abordado neste documento se aplica ao Cisco GSR, ASR9000, CRS e outros roteadores que executam IOS XR. As saídas usadas abaixo foram tiradas de um roteador de laboratório que executa a versão do IOS XR anterior à 4.2.X.
Problema
Os roteadores que executam o IOS XR versão 4.2.X ou anterior podem observar uma alta utilização constante da CPU devido ao processo do agente de alarme devido a um bug de software conhecido. A saída show process cpu mostraria o processo do alarm-logger consumindo a quantidade máxima de utilização da CPU.
show proc cpu | ex "0% 0% 0%"
CPU utilization for one minute: 100%; five minutes: 100%; fifteen minutes: 100%
PID 1Min 5Min 15Min Process
<snip>
53281 2% 2% 2% syslogd_helper
57379 1% 1% 1% fabricq_prp_driver
69636 1% 1% 1% correlatord
69677 6% 6% 6% syslogd
118842 1% 1% 1% sysdb_svr_local
122962 3% 3% 3% gsp
229604 2% 2% 2% eem_ed_syslog
262456 1% 1% 1% tacacsd
452726918 67% 71% 72% alarm-logger
463302887 1% 1% 1% exec
<snip>
No buffer de registro, você pode ver logs contínuos semelhantes a:
tacacsd[XXXX]: %SECURITY-TACACSD-7-GENERIC_ERROR : Falha ao obter solicitação para: chave -XXXXX/XXXX/XXXX/XXXX sessão XXXXX
show log
<snip>
RP/0/7/CPU0:Dec 26 04:02:03.149 : tacacsd[1110]: %SECURITY-TACACSD-6-SERVER_UP :
TACACS+ server 32.95.X.X/XXXX is UP
RP/0/7/CPU0:Dec 26 04:02:05.956 : tacacsd[1110]: %SECURITY-TACACSD-6-SERVER_DOWN :
TACACS+ server 32.95.X.X/XXXX is DOWN - Socket 43: Connection timed out
RP/0/7/CPU0:Dec 26 04:02:09.468 : tacacsd[1110]: %SECURITY-TACACSD-6-SERVER_DOWN :
TACACS+ server 199.37.X.X/XXXX is DOWN - Socket 43: Connection timed out
RP/0/7/CPU0:Dec 26 04:02:09.647 : tacacsd[1110]: %SECURITY-TACACSD-6-TIMEOUT_IGNORED :
A time out event has been ignored for context key -953829129/1073/60000000/6486405
(session 6486405)
RP/0/7/CPU0:Dec 26 04:02:11.647 : tacacsd[1110]: %SECURITY-TACACSD-7-GENERIC_ERROR :
Failed to get request for: key -953829129/1073/60000000/6486405 session 105407493
RP/0/0/CPU0:last message repeated 520 times
RP/0/7/CPU0:Dec 26 04:02:34.064 : tacacsd[1110]: %SECURITY-TACACSD-6-SERVER_UP :
TACACS+ server 32.95.X.X/XXXX is UP
RP/0/7/CPU0:Dec 26 04:02:34.064 : tacacsd[1110]: %SECURITY-TACACSD-7-GENERIC_ERROR :
Failed to get request for: key -953829129/1073/60000000/6486405 session 105407493
os detalhes dos processos alarm-logger e tacacsd podem ser vistos como abaixo.
show processes alarm-logger
<snip>
Job Id: 114
PID: 135303
Executable path: /c12k-os-4.2.4/sbin/alarm-logger
Instance #: 1
Version ID: 00.00.0000
Respawn: ON
Respawn count: 1
Max. spawns per minute: 12
Last started: Tue Aug 13 02:17:23 2013
Process state: Run
Package state: Normal
core: MAINMEM
Max. core: 0
Level: 91
Placement: None
startup_path: /pkg/startup/alarm-logger.startup
Ready: 0.672s
Process cpu time: 1401.018 user, 49.774 kernel, 1450.792 total
JID TID Stack pri state TimeInState HR:MM:SS:MSEC NAME
114 1 88K 10 Receive 0:00:02:0071 0:00:40:0919 alarm-logger
114 2 88K 10 Receive 3242:46:17:0308 0:00:00:0000 alarm-logger
114 3 88K 10 Reply 0:00:00:0000 0:23:08:0029 alarm-logger
114 4 88K 10 Mutex 0:00:00:0000 0:00:21:0957 alarm-logger
-------------------------------------------------------------------------------
<snip>
show processes tacacsd
<snip>
Job Id: 1110
PID: 266551
Executable path: /disk0/iosxr-infra-4.2.4/bin/tacacsd
Instance #: 1
Version ID: 00.00.0000
Respawn: ON
Respawn count: 1
Max. spawns per minute: 12
Last started: Tue Aug 13 02:23:47 2013
Process state: Run
Package state: Normal
Started on config: cfg/gl/aaa/tacacs/
Process group: central-services
core: MAINMEM
Max. core: 0
Placement: Placeable
startup_path: /pkg/startup/tacacsd.startup
Ready: 3.954s
Process cpu time: 1010.118 user, 185.932 kernel, 1196.050 total
JID TID Stack pri state TimeInState HR:MM:SS:MSEC NAME
1110 1 108K 16 Sigwaitinfo 3242:46:40:0742 0:00:00:0116 tacacsd
1110 2 108K 10 Nanosleep 0:01:03:0835 0:00:00:0019 tacacsd
1110 3 108K 10 Receive 3242:46:41:0593 0:00:00:0002 tacacsd
1110 4 108K 10 Reply 0:00:00:0000 0:08:55:0970 tacacsd
1110 5 108K 16 Receive 3242:46:40:0771 0:00:00:0000 tacacsd
1110 6 108K 10 Receive 0:07:07:0403 0:04:03:0462 tacacsd
1110 7 108K 10 Receive 0:00:01:0389 0:03:28:0939 tacacsd
1110 8 108K 10 Receive 0:00:01:0332 0:03:03:0622 tacacsd
-------------------------------------------------------------------------------
<snip>
A alta utilização da CPU é causada devido à inundação de mensagens de syslog, fazendo com que o buffer do registro de alarme fique cheio. Assim, o processo do agente de alarme permanece ocupado tentando manipular a mensagem e enfrentando a condição de buffer cheio ao mesmo tempo. Nesse caso, o processo TACACS está sobrecarregando o alarm-logger. Como o alarm-logger é uma vítima, reiniciar o processo do alarm-logger não ajudará, pois o buffer de memória compartilhada permanece persistente após a reinicialização do processo.
Solução
Este problema foi resolvido e corrigido através do bug de software CSCuh98484 - Erro de acsd "Falha ao obter solicitação de chave" causa alta utilização da CPU. Detalhes do bug estão presentes aqui
Observe que a reinicialização do processo tacacsd é uma solução alternativa que deve interromper os registros e a utilização da CPU deve retornar ao nível normal. Reiniciar o processo tacacsd não afetará nenhuma funcionalidade ou encaminhamento de pacote de dados, ele colocará o processo em seu estado inicial.
Esse bug foi corrigido nas seguintes versões do IOS XR.
4.3.2.SP2
4.3.2.SP3
4.3.2.SP5
4.3.2.SP6
4.3.2.SP7
4.3.2.SP8