Causa de carga de CPU alta no mecanismo de roteamento do roteador peering Juniper

20

Recentemente, a utilização da CPU do mecanismo de roteamento em dois de nossos roteadores peering Juniper aumentou de ~ 10-20% da carga média para 80 +%. Estou tentando descobrir o que está causando isso (e como diminuir essa carga alta).

Algumas informações sobre os roteadores: ambos executam a mesma versão do JunOS, estão conectados às mesmas duas LANs IXP emparelhadas e têm um grande número (várias centenas) de sessões IPv4 e IPv6 (quase idênticas). Ambos os roteadores têm uma conexão com um provedor de trânsito IP diferente e estão conectados da mesma maneira ao restante de nossa rede. A carga da CPU dos mecanismos de roteamento não é linear em mais de 80%, há quedas de volta aos níveis normais por minutos a horas, mas essas quedas não são tão frequentes.

Coisas que eu verifiquei:

  • nenhuma alteração de configuração foi feita no momento em que o aumento começou
  • não há aumento no tráfego não unicast direcionado ao plano de controle
  • não há alterações (substanciais) na quantidade de tráfego encaminhado (embora mesmo um aumento não deva importar)
  • show system processes summaryindica que o rpdprocesso está causando a alta carga da CPU
  • não há pares de BGP agitando rapidamente causando uma grande quantidade de alterações no BGP

Uma explicação possível que posso encontrar é um par (ou mais de um) em um dos dois roteadores do IXP, que estão conectados ao envio de um grande número de atualizações de BGP. Atualmente, só tenho estatísticas sobre o número de mensagens BGP para minhas sessões de trânsito (mostrando nenhuma atividade anormal) e com várias centenas de sessões BGP nas LANs emparelhadas, não é tão fácil identificar as sessões problemáticas se devo criar gráficos para todas as sessões.

Minhas perguntas são:

  • existem outras coisas que devo verificar para encontrar a causa desse aumento na carga da CPU nos mecanismos de roteamento?
  • como posso descobrir facilmente quais sessões estão causando esses problemas (se minha suposição estiver correta)? A ativação das opções de rastreamento do BGP gera enormes quantidades de dados, mas não tenho certeza se isso me fornece informações reais.
Teun Vink
fonte

Respostas:

17

Pode haver algumas informações úteis para você no Juniper Knowledge Center .

Se o RPD estiver consumindo CPU alta, execute as seguintes verificações e verifique os seguintes parâmetros:

  • Verifique as interfaces: Verifique se alguma interface está batendo no roteador. Isso pode ser verificado olhando para a saída das mensagens show log e show interfaces ge-x / y / z de comandos extensos. Solucione os problemas por que eles estão batendo; se possível, considere ativar o tempo de espera para o link para cima e para baixo.

  • Verifique se há mensagens de erro do syslog relacionadas às interfaces ou a qualquer FPC / PIC, observando a saída das mensagens de log da mostra.

  • Verifique as rotas: Verifique o número total de rotas que são aprendidas pelo roteador, observando a saída do resumo da rota da mostra. Verifique se atingiu o limite máximo.

  • Verifique as tarefas do RPD: identifique o que está mantendo o processo ocupado. Isso pode ser verificado ativando primeiro a contabilização de tarefas definidas. Importante: Isso pode aumentar a carga na CPU e sua utilização; portanto, não esqueça de desligá-lo quando terminar a coleta de saída necessária. Em seguida, execute show accounting de tarefa e procure o encadeamento com o tempo de CPU alto:

    user@router> show task accounting
    Task                       Started    User Time  System Time  Longest Run
    Scheduler                   146051        1.085        0.090        0.000
    Memory                           1        0.000            0        0.000  <omit>
    BGP.128.0.0.4+179              268       13.975        0.087        0.328
    BGP.0.0.0.0+179      18375163 1w5d 23:16:57.823    48:52.877        0.142
    BGP RT Background              134        8.826        0.023        0.099
    

Descubra por que um encadeamento, relacionado a um prefixo ou protocolo específico, está usando alta CPU.

  • Você também pode verificar se as rotas estão oscilando (ou rotações), observando a saída do comando shell: %rtsockmon –t

  • Verifique a memória RPD. Algumas vezes, a alta utilização da memória pode levar indiretamente a uma alta CPU.

Artanix
fonte
1
RPD é um pouco chato blackbox. Além das ótimas sugestões rtsockmon -t e show task account, eu também gostaria de adicionar 'show krt queue' como ferramenta potencialmente útil.
ytti
A fila show krt mostra todas as atualizações de rota que formam o controle para o plano de dados. Você não verá nada na fila durante a maior parte do tempo. Quando ocorre um retalho, isso pode permanecer na fila por algum tempo
mellowd 28/06
Devido ao PR836197, poderia estar literalmente dentro de horas :(
ytti 28/06
Alguns desses pontos eram óbvios demais para mencionar (interfaces de oscilação, erros nos logs), mas as sugestões do rtsockmon e da contabilidade de tarefas foram esclarecedoras. Parece que muitos ciclos de CPU são usados ​​para SNMP, portanto, a seguir, vamos descobrir quais caixas e ferramentas estão pesquisando esses roteadores.
Teun Vink
1
Desculpe se eles eram muito óbvios, eu vim de uma base de suporte onde fazer com que um usuário verifique se o plug-in foi um aborrecimento!
Artanix
2

Eu sei que esta discussão é antiga, mas por uma questão de integridade:

Se a CPU alta ocorrer aleatoriamente e você não conseguir determinar o processo que está causando isso, podemos criar o script abaixo.

Com esse script, capturaremos o processo extensivamente quando um processo aumentar mais do que o limite normal ou esperado; isso não deve atrapalhar nenhum tráfego, mas um MW ainda é recomendado. No entanto, eu vejo que você reduziu a RPD.

snmp {
    health-monitor {
        interval 30;
        rising-threshold 60;
        falling-threshold 50;
    }
}

event-options {
    policy MONITOR-CPU {
        events snmpd_health_mon_thresh_cross;
        attributes-match {
            snmpd_health_mon_thresh_cross.event-name matches "Health Monitor.+CPU.+rising";
        }
        then {
            execute-commands {
                commands {
                    "show system processes extensive";
                }
                output-filename cpu-processes;
                destination local-flash;
                output-format text;
            }
        }                               
    }
    destinations {
        local-flash {
            archive-sites {
                /var/tmp;
            }
        }
    }
}

SAÍDA DE CONFIGURAÇÃO DO DISPLAY>

set snmp health-monitor interval 30
set snmp health-monitor rising-threshold 60
set snmp health-monitor falling-threshold 50
set event-options policy MONITOR-CPU events snmpd_health_mon_thresh_cross
set event-options policy MONITOR-CPU attributes-match snmpd_health_mon_thresh_cross.event-name matches "Health Monitor.+CPU.+rising"
set event-options policy MONITOR-CPU then execute-commands commands "show system processes extensive"
set event-options policy MONITOR-CPU then execute-commands output-filename cpu-processes
set event-options policy MONITOR-CPU then execute-commands destination local-flash
set event-options policy MONITOR-CPU then execute-commands output-format text
set event-options destinations local-flash archive-sites /var/tmp

Você também verificou se alguma mensagem ddos ​​foi relatada? Você pode executar os seguintes comandos:

show ddos-protection protocols statistics brief
show ddos-protection statistics
show ddos-protection version

Então, dependendo do que você vê, pode ser reduzido, por exemplo:

show ddos-protection protocols ttl statistics
show ddos-protection protocols ttl violations
show ddos-protection protocols ttl flow-detection detail  */*this cm needs prior config*/*

O Juniper também possui uma lista de coleta para esse tipo de problema em KB22637

Comandos de CLI de alta CPU

set cli timestamp
show chassis routing-engine (multiple snapshots, atleast 5)
show system processes extensive (multiple snapshots atleast 5)
show system users
show system connections
show system statistics

Ative a contabilidade de tarefas e colete a saída detalhada dos detalhes da contabilidade de tarefas (três vezes com um intervalo de 30 segundos). Não se esqueça de desligá-lo depois de terminar.

set task accounting on 
show task accounting detail
set task accounting off

show task memory detail
show task memeory summary
show task io
show task history
show task statistics
show task job
show task jobs
show krt queue
show krt state

Logs

Arquive / var / log conforme especificado na Etapa 1 acima

user@router# show routing-options 
traceoptions { 
file routing-trace size 10m files 20 world-readable; 
flag task; 
flag state; 
flag timer; 
}

Além disso, se você estiver executando uma versão antiga que tenha propensão a erros, convém verificar o suporte de vida do código:

http://www.juniper.net/support/eol/junos.html

Outro ponto a ser mencionado, que poderia ser um ataque de vetor, é não proteger o ER do tráfego de exceções indesejadas. Verifique se você tem um filtro de firewall sob o loopback.

Eu já vi scripts anteriores no roteador causando alta CPU, não tenho certeza se o rpd veio à minha vista, mas isso é algo que você talvez não queira ignorar.

Se você vir muitos registros nos registros com RPD_MPLS_PATH_BANDWIDTH_CHANGE, poderá estar usando um intervalo de ajuste muito agressivo

Verifique todas as descargas em "show fila do sistema: esta é a fila do kernel, alguma pista pode aparecer.

DRP
fonte