In questo documento vengono illustrati i processi Exec e Virtual Exec e viene spiegato come risolvere i problemi relativi all'utilizzo elevato della CPU in questi processi.
Cisco consiglia di consultare la sezione Risoluzione dei problemi di utilizzo elevato della CPU sui router Cisco prima di procedere con questo documento.
Il documento può essere consultato per tutte le versioni software o hardware.
Le informazioni discusse in questo documento fanno riferimento a dispositivi usati in uno specifico ambiente di emulazione. Su tutti i dispositivi menzionati nel documento la configurazione è stata ripristinata ai valori predefiniti. Se la rete è operativa, valutare attentamente eventuali conseguenze derivanti dall'uso dei comandi.
Per ulteriori informazioni sulle convenzioni usate, consultare il documento Cisco sulle convenzioni nei suggerimenti tecnici.
Il processo Exec nel software Cisco IOS® è responsabile della comunicazione sulle linee tty (console, ausiliarie, asincrone) del router. Il processo Virtual Exec è responsabile delle linee vty (sessioni telnet).
I processi Exec e Virtual Exec sono processi con priorità media, pertanto se esistono altri processi con priorità più alta (Alta o Critica), i processi con priorità più alta ottengono le risorse CPU.
router#show process | i CPU|Exec CPU utilization for five seconds: 0%/0%; one minute: 0%; five minutes: 0% PID QTy PC Runtime (ms) Invoked uSecs Stacks TTY Process 22 M* 0 9644 1733 5564 9732/12000 0 Exec 46 ME 80468980 28 6 466610520/12000 66 Virtual Exec
Per una descrizione dettagliata dell'output di questo comando, consultare il comando show processes.
Se durante queste sessioni vengono trasferiti molti dati, l'utilizzo della CPU per il processo Exec aumenta.
Infatti, quando il router desidera inviare un carattere semplice attraverso queste righe, usa alcune risorse CPU:
Per la console (Exec), il router utilizza un interrupt per carattere.
L'interrupt della console può essere rilevato nell'output del comando show stack:
router#show stacks Minimum process stacks: Free/Size Name 11516/12000 Router Init 9404/12000 Init 5520/6000 AIM_MIB_CREATION 5448/6000 RADIUS INITCONFIG 9728/12000 Virtual Exec Interrupt level stacks: Level Called Unused/Size Name 1 23035463 7008/9000 Network interfaces 2 0 9000/9000 Timebase Reference Interrupt 3 0 9000/9000 PA Management Int Handler 6 9791 8892/9000 16552 Con/Aux Interrupt 7 1334963882 8920/9000 MPC860 TIMER INTERRUPT
Per la linea vty (Virtual Exec), la sessione telnet deve compilare un pacchetto TCP e inviare i caratteri al client telnet.
Di seguito sono elencati i possibili motivi dell'elevato utilizzo della CPU nel processo di esecuzione:
Troppi dati vengono inviati tramite la porta della console.
Una delle possibili cause è l'esistenza di troppi messaggi della console generati dal router.
Verificare se sono stati avviati debug sul router con il comando show debugging.
Disabilitare la registrazione della console sul router con (nessuna console di registrazione).
Verificare se sulla console è stampato un output lungo (ad esempio, un show tech-support o un show memory).
Il software Cisco IOS contiene un bug.
Utilizzare Bug Toolkit (solo utenti registrati) per cercare i bug con questo sintomo nella versione software Cisco IOS in uso.
Il comando exec è configurato per le linee asincrone e ausiliarie.
Se una linea contiene solo traffico in uscita, il processo di esecuzione dovrebbe essere disattivato per questa linea, poiché se la periferica (ad esempio un modem) collegata a questa linea invia alcuni dati non richiesti, il processo di esecuzione inizierà su questa linea.
Se il router viene usato come terminal server (per il reverse telnet ad altre console di dispositivi), si consiglia di non configurare alcun exec sulle linee collegate alla console degli altri dispositivi. In caso contrario, i dati restituiti dalla console potrebbero avviare un processo di esecuzione che utilizza risorse CPU.
Di seguito sono elencati i possibili motivi dell'elevato utilizzo della CPU nel processo Virtual Exec:
Un bug nel software Cisco IOS
Utilizzare Bug Toolkit (solo utenti registrati) per cercare i bug con questo sintomo nella versione software Cisco IOS in uso.
Troppi dati inviati attraverso le sessioni telnet.
Il motivo più comune per un utilizzo elevato della CPU nel processo Virtual Exec è il trasferimento di una quantità eccessiva di dati dal router alla sessione telnet.
Questo problema può verificarsi quando si eseguono comandi con output lunghi (ad esempio, show tech-support, show memory e così via) dalla sessione telnet.
La quantità di dati trasferiti tramite ciascuna sessione vty può essere verificata con il comando show tcp:
router#show tcp vty 0
tty66, virtual tty from host 10.48.77.64
Connection state is ESTAB, I/O status: 1, unread input bytes: 1
Local host: 10.48.77.27, Local port: 23
Foreign host: 10.48.77.64, Foreign port: 11006
........
Datagrams (max data segment is 1460 bytes):
Rcvd: 525 (out of order: 0), with data: 53, total data bytes: 87
Sent: 366 (retransmit: 257, fastretransmit: 0), with data: 356, total data bytes:
158187
Una sessione telnet bloccata provoca un utilizzo elevato della CPU a causa del processo Virtual Exec. Per cancellare la sessione telnet bloccata, nella maggior parte dei casi è necessario ricaricare il dispositivo. L'altro modo per cancellare la sessione telnet bloccata è cancellare il processo TCP. Il processo TCP può essere identificato con il comando show tcp brief come in questo output:
Router#show tcp brief TCB Local Address Foreign Address (state) 02FA62D0 172.16.152.75.23 dhcp-171-69-104-.3013 ESTAB
Dall'output sopra riportato, il processo TCP 02FA62D0 deve essere cancellato per cancellare la sessione telnet bloccata con il comando clear tcp tcb 0x02fa62d0 .
Revisione | Data di pubblicazione | Commenti |
---|---|---|
1.0 |
12-Dec-2008 |
Versione iniziale |