Causa di un elevato carico della CPU sul motore di routing del router peering Juniper


20

Recentemente l'utilizzo della CPU del motore di routing su due dei nostri router peering Juniper è aumentato dal ~ 10-20% del carico medio all'80 +%. Sto cercando di capire cosa sta causando questo (e come ridurre questo carico elevato).

Alcune informazioni sui router: entrambi eseguono la stessa versione JunOS, entrambi sono collegati alle stesse due LAN IXP peering e hanno un gran numero (diverse centinaia) di sessioni (quasi identiche) IPv4 e IPv6. Entrambi i router hanno una connessione a un diverso provider di transito IP e sono collegati allo stesso modo al resto della nostra rete. Il carico della CPU dei motori di routing non è fisso sull'80 +%, ci sono cadute ai livelli normali da minuti a ore, ma questi cali non sono così frequenti.

Cose che ho controllato:

  • non sono state apportate modifiche alla configurazione nel momento in cui è iniziato l'aumento
  • non c'è aumento del traffico non unicast diretto al piano di controllo
  • non c'è (sostanziale) cambiamento nella quantità di traffico inoltrato (anche se anche un aumento non dovrebbe importare)
  • show system processes summaryindica che il rpdprocesso sta causando un elevato carico della CPU
  • non ci sono peer BGP che sbattono rapidamente causando una grande quantità di cambiamenti BGP

Una possibile spiegazione che posso trovare è un peer (o più di uno) su uno dei due router di IXP che sono collegati all'invio di un gran numero di aggiornamenti BGP. Attualmente ho solo statistiche sul numero di messaggi BGP per le mie sessioni di transito (che non mostrano attività anomale) e con diverse centinaia di sessioni BGP sulle LAN di peering non è così facile individuare le sessioni problematiche se dovessi creare grafici per tutte le sessioni.

Le mie domande sono:

  • ci sono altre cose che dovrei verificare per trovare la causa di questo aumento del carico della CPU sui motori di routing?
  • come posso facilmente scoprire quali sessioni stanno causando questi problemi (se la mia ipotesi è corretta)? L'abilitazione delle traceoption BGP genera enormi quantità di dati, ma non sono sicuro che mi dia delle intuizioni reali.

Risposte:


17

Potrebbero esserci alcune informazioni utili per te nel Juniper Knowledge Center .

Se RPD consuma CPU elevata, quindi eseguire i seguenti controlli e verificare i seguenti parametri:

  • Controlla le interfacce: controlla se sul router sono presenti delle interfacce. Ciò può essere verificato osservando l'output dei messaggi di log dello show e mostrando a interfacce ge-x / y / z comandi estesi. Risolvi il motivo per cui stanno sbattendo; se possibile, puoi considerare di abilitare il tempo di attesa per il collegamento in alto e il collegamento in basso.

  • Controllare se ci sono messaggi di errore syslog relativi alle interfacce o qualsiasi FPC / PIC, osservando l'output dei messaggi di registro dello spettacolo.

  • Controlla i percorsi: verifica il numero totale di percorsi appresi dal router osservando l'output del riepilogo percorso mostra. Controlla se ha raggiunto il limite massimo.

  • Controlla le attività RPD: identifica cosa sta tenendo occupato il processo. Questo può essere verificato abilitando prima l'account impostato su attività. Importante: questo stesso potrebbe aumentare il carico sulla CPU e il suo utilizzo; quindi non dimenticare di spegnerlo quando hai finito con la raccolta di output richiesta. Quindi eseguire show task accounting e cercare il thread con il tempo CPU elevato:

    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
    

Scopri perché un thread, correlato a un prefisso o un protocollo particolare, sta occupando una CPU elevata.

  • Puoi anche verificare se le rotte sono oscillanti (o rotte di rotta) osservando l'output del comando shell: %rtsockmon –t

  • Controlla la memoria RPD. Alcune volte un utilizzo elevato della memoria può indirettamente portare a CPU elevate.


1
RPD è un po 'fastidioso blackbox. Oltre ai fantastici suggerimenti di rtsockmon -t e show account task, vorrei anche aggiungere "show krt queue" come strumento potenzialmente utile.
ytti,

show krt queue ti mostrerà tutti gli aggiornamenti del percorso che vanno dal controllo al piano dati. Non dovresti vedere nulla in coda per la maggior parte del tempo. Quando si verifica un lembo, questo può rimanere in coda per un bel po 'di tempo
Mellowd,

A causa di PR836197 potrebbe essere letteralmente nelle ore :(
ytti

Un paio di questi punti erano troppo ovvi per essere menzionati (interfacce di sbattimento, errori nei log), ma i suggerimenti di rtsockmon e di contabilità delle attività erano approfonditi. Sembra che molti cicli CPU siano usati per SNMP, quindi il prossimo passo è capire quali scatole e strumenti stanno eseguendo il polling di questi router.
Teun Vink

1
Scusate se erano troppo ovvi, vengo da un background di supporto in cui convincere un utente a verificare se il suo collegamento era una seccatura!
Artanix,

2

So che questa discussione è vecchia ma per completezza:

Se la CPU alta si verifica in modo casuale e non sei in grado di determinare il processo che causa questo, possiamo creare lo script di seguito.

Con questo script cattureremo il processo in modo estensivo quando un processo supera la soglia normale o prevista, ciò non dovrebbe interrompere il traffico ma si consiglia comunque un MW. Comunque vedo che l'hai ristretto per essere 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;
            }
        }
    }
}

DISPLAY SET OUTPUT>

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

Hai anche controllato se sono stati segnalati messaggi ddos? È possibile eseguire i seguenti comandi:

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

Quindi, a seconda di ciò che vedi, può essere ridotto, ad esempio:

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*/*

Juniper ha anche un elenco di raccolte per questo tipo di problemi in KB22637

Comandi CLI CPU elevati

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

Attiva la contabilità delle attività e raccogli l'output dei dettagli della contabilità delle attività (tre volte con un intervallo di 30 secondi). Non dimenticare di spegnerlo dopo aver finito.

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

Archive / var / log come specificato nel passaggio 1 sopra Traceoptions

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

Inoltre, se stai eseguendo una versione precedente che è soggetta a bug, potresti voler controllare il supporto vitale del codice:

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

Un altro punto da menzionare che potrebbe essere un attacco vettoriale non è aver protetto il tuo RE da traffico di eccezioni indesiderato. Assicurati di avere un filtro firewall sotto il loopback.

Ho visto in passato degli script sul router che causavano alti cpu non sono sicuro se rpd mi è apparso, ma questo è qualcosa che potresti non voler trascurare.

Se vedi nei registri molti hit con RPD_MPLS_PATH_BANDWIDTH_CHANGE potresti usare un intervallo di regolazione molto aggressivo

Controlla eventuali gocce su "mostra la coda di sistema: questa è la coda del kernel, potrebbe apparire qualche indizio.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.