Sommario

Introduzione

Premesse

Risoluzione dei problemi

Individuazione applicazione responsabile della perdita

Decodifica Allocator PC

Analizza statistiche della memoria MallocLite

Disabilita MallocLite

Introduzione

Questo documento descrive come risolvere i problemi relativi alle perdite di memoria sulle piattaforme software Cisco IOS®.

Specifica inoltre le informazioni da raccogliere prima di aprire una richiesta TAC (Cisco Technical Assistance Center) o ricaricare il dispositivo. Raccogliere i risultati menzionati in questo documento e allegarli al caso TAC per contribuire a velocizzare la risoluzione del problema.

Premesse

MallocLite viene utilizzato dal gestore della memoria per allocare piccoli pezzi di memoria a dimensione fissa, noti come blocchi, per allocazioni inferiori o uguali a 128 byte. Le allocazioni di memoria di piccole dimensioni non hanno il sovraccarico di un'intestazione di blocco per ogni allocazione. Questa funzionalità è supportata solo per i pool di memoria del processore.

Ogni intestazione di blocco di memoria occupa circa 48 byte di memoria, mentre il blocco più piccolo occupa circa 24 byte. Con un approccio tradizionale nel software Cisco IOS per ciascuna allocazione, si consumano almeno 72 (48 + 24) byte di memoria, anche se è necessario allocare solo 8 byte di dati effettivi.

Con MallocLite, questo sovraccarico può essere ridotto utilizzando blocchi. Vi è ancora qualche sovraccarico, perché i pezzi devono essere gestiti. Tuttavia, poiché i blocchi sono di dimensioni fisse, vengono gestiti in modo diverso rispetto ai blocchi e il sovraccarico è inferiore.

È responsabilità delle applicazioni che utilizzano la memoria MallocLite liberarla in modo appropriato. MallocLite maschera l'utente della memoria.

Risoluzione dei problemi

Nota: Cisco CLI Analyzer (solo utenti registrati) supporta alcuni comandi show. Usare Cisco CLI Analyzer per visualizzare un'analisi dell'output del comando show.

Individuazione applicazione responsabile della perdita

In genere, è difficile identificare un bug esistente se si cerca solo tramite la parola chiave malloclite.

Nell'esempio viene mostrato come il processo *MallocLite* stia conservando una quantità di memoria anomala:

#show processes memory sorted

Processor Pool Total:  1614282720  Used:  1544726580  Free:   69556140

I/O Pool Total:  313524224   Used:  115564032   Free:  197960192

PID TTY  Allocated      Freed    Holding    Getbufs    Retbufs Process

0   0          0          0  1476043512         0          0 *MallocLite*

È necessario identificare l'applicazione esatta che è responsabile della perdita. Tre possibili metodi di identificazione sono:

- Decodifica allocatore PC.

- Esaminare le statistiche della memoria MallocLite.

- Disabilitare MallocLite.

Decodifica Allocator PC

Anche con MallocLite attivato, di solito si può vedere quale funzione ha richiesto la memoria. L'output del comando show memory allocating-process totals potrebbe visualizzare valori PC diversi anche se il nome indicato è MallocLite:

#show memory allocating-process totals

<snip>

Allocator PC Summary for: Processor

Displayed first 2048 Allocator PCs only

PC          Total   Count  Name

0x620BE3C4   42807572     594  MallocLite

0x620ADDD4   13597308     193  MallocLite

0x60738BB0    8909824     122  MallocLite

0x620AE0E0    2060716      31  MallocLite

0x620AE10C    1982780      30  MallocLite

Un tecnico Cisco TAC può decodificare i valori PC dall'inizio dell'elenco (con il totale più alto). Ciò consente di identificare l'applicazione che presenta la perdita di memoria.

Analizza statistiche della memoria MallocLite

Tra i miglioramenti aggiunti al software Cisco IOS versione 15.1T, una nuova CLI mostra il riepilogo della memoria MallocLite allocata da ciascun PC. Il comando show memory lite-chunks aiuta a identificare le applicazioni che usano una grande quantità di blocchi MallocLite.

show memory lite-chunks { statistics | totals } { summary { pool | { all | pool } } }

Per i dettagli del comando show memory lite-chunks, consultare la guida di riferimento del comando.

CLI   : show memory lite-chunks totals

DESC  : Summary of all pools, based on alloc pc.

This cli can be used to find the alloc_pc which is using large amount memory

allocated from all mlite pools

CLI   : show memory lite-chunks statistics

DESC  : Displays number of allocated & free mlite chunks

CLI   : show memory lite-chunks summary pool pool

DESC  : Show summary of particular mlite pool

This cli can be used to find the alloc_pc which is using large amount of memory

in individual mlite pool

CLI   : show memory lite-chunks summary pool all

DESC  : Show individual summary of all mlite pools

CLI   : show memory lite-chunks pool pool

DESC  : Show All chunk elements in the specified pool

CLI   : show memory lite-chunks pool all

DESC  : show all chunk elements in all mlite pools

Di seguito sono riportati alcuni esempi di output di questo comando:

#show memory lite-chunks ?

pool        Malloc lite pool

statistics  Malloc lite statistics

summary     Malloc Lite summary

totals      Malloc Lite Allocating totals

#show memory lite-chunks statistics

Pool       Inuse       Free

8-Bytes         140       1904

20-Bytes         173       1313

44-Bytes         171        791

68-Bytes          24        687

96-Bytes          26        519

128-Bytes          20        410

#show memory lite-chunks totals

PC         Total       Count

26067AE0          2112          33

2269E68C          1932          29

2269FACC          1664          29

2269F964          1664          26

2269FA9C          1580          29

26067FB4          1360          34

23CD2A0C          1036           7

#show memory lite-chunks pool ?

128-Bytes  128 bytes pool

20-Bytes   20 bytes pool

44-Bytes   44 bytes pool

68-Bytes   68 bytes pool

8-Bytes    8 bytes pool

96-Bytes   96 bytes pool

all        all pools

#show memory lite-chunks summary pool 8

8 bytes pool

PC         Total       Count

2269FB10           812          29

23612084           700          25

2269F9F8           700          25

2269F9EC           700          25

Il tecnico TAC può decodificare i valori PC con il totale più alto e identificare l'applicazione che sta perdendo memoria.

Disabilita MallocLite

La funzione MallocLite è attivata per impostazione predefinita. Per indagare la perdita di MallocLite, è possibile disabilitare MallocLite:

(config)#no memory lite

La memoria perduta rimarrà sotto MallocLite fino al successivo caricamento; tuttavia, è possibile iniziare a monitorare ulteriori perdite con i comandi show PROCESSES in memoria ordinati e show memory allocating-process totals. Le fughe di notizie appariranno sotto il processo reale.

Se la memoria del dispositivo è quasi esaurita, è necessario salvare la configurazione e ricaricare il dispositivo per liberare la memoria:

#wr

#reload

La memoria potrebbe esaurirsi di nuovo nel tempo, quindi utilizzare i comandi show processes processes memory sort e show memory allocating-process totals per monitorare l'utilizzo della memoria da quel momento in poi.

Nota: Se si disabilita MallocLite con il comando no memory lite e si ricarica il dispositivo, l'output del comando show memory lite-chunks sarà vuoto.

Per i dettagli del comando memory lite, consultare la guida di riferimento del comando.