Inleiding
Dit document beschrijft hoe u MallocLite-geheugenlekken op Cisco IOS®-softwareplatforms kunt oplossen.
Het specificeert ook de informatie die u moet verzamelen voordat u een Cisco Technical Assistance Center (TAC)-case opent of het apparaat opnieuw laadt. Verzamel de output die in dit document wordt vermeld, en voeg ze aan de TAC-case toe om probleemoplossing te helpen versnellen.
Achtergrondinformatie
MallocLite wordt gebruikt door de geheugenmanager om kleine, vaste grootte stukjes geheugen, bekend als stukjes, toe te wijzen voor toewijzingen kleiner dan of gelijk aan 128 bytes. De kleine geheugentoewijzingen hebben niet de overheadkosten van een blokkopbal voor elke toewijzing. Deze optie wordt alleen ondersteund voor processorgeheugenpools.
Elk geheugenblok heeft ongeveer 48 bytes geheugen en het kleinste blok neemt ongeveer 24 bytes. Met een traditionele benadering in Cisco IOS-software voor elke toewijzing zou u ten minste 72 (48 + 24) bytes aan geheugen gebruiken, zelfs als u slechts 8 bytes aan feitelijke gegevens hoeft toe te wijzen.
Met MallocLite kan deze overhead worden verminderd door het gebruik van stukjes. Er zijn nog wel wat overheadkosten, want de stukken moeten beheerd worden. Omdat de stukjes echter een vaste grootte hebben, worden ze op een andere manier beheerd dan blokken, en de overheadkosten zijn minder.
Het is de verantwoordelijkheid van de applicaties die het MallocLite geheugen gebruiken om het goed vrij te maken. MallocLite maskeert de gebruiker van het geheugen.
Problemen oplossen
Opmerking: de Cisco CLI Analyzer (alleen geregistreerde klanten) ondersteunt bepaalde show commando's. Gebruik de Cisco CLI Analyzer om een analyse te bekijken van de output van de opdracht show .
Identificeer de toepassing die verantwoordelijk is voor lekkage
Het is meestal moeilijk om een bestaande bug te identificeren als je alleen zoekt op basis van het malloclite sleutelwoord.
Dit voorbeeld laat zien dat het *MallocLite*-proces een abnormale hoeveelheid geheugen bevat:
#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*
U moet de exacte toepassing identificeren die verantwoordelijk is voor lekkage. Drie mogelijke identificatiemethoden zijn:
- Decodeer allocator-pc.
- Onderzoek MallocLite geheugenstatistieken.
- MallocLite uitschakelen.
PC voor decoderingsallocator
Zelfs met MallocLite aangezet, kunt u gewoonlijk zien welke functie om het geheugen vroeg. De output van het bevel van het show geheugen allocating-proces totalen zou verschillende PC waarden kunnen tonen alhoewel de gerapporteerde naam MallocLite is:
#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
Een Cisco TAC engineer kan de PC waarden bovenaan de lijst decoderen (met het hoogste totaal). Dit helpt de toepassing te identificeren die het geheugenlek heeft.
MallocLite Geheugenstatistieken onderzoeken
Onder de verbeteringen toegevoegd in Cisco IOS-softwarerelease 15.1T was een nieuwe CLI die de samenvatting van MallocLite-geheugen toont dat door elke PC is toegewezen. De opdracht lite-chunks van het showgeheugen kan u helpen toepassingen te identificeren die een grote hoeveelheid MallocLite-blokken gebruiken.
show memory lite-chunks { statistics | totals } { summary { pool | { all | pool } } }
Raadpleeg de opdrachtreferentie voor informatie over de opdracht lite-chunks van het showgeheugen.
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
Voorbeelden van uitvoer van deze opdracht zijn:
#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
Opnieuw kan de TAC engineer PC waarden decoderen met het hoogste totaal en de applicatie identificeren die het geheugen lekt.
MallocLite uitschakelen
De functie MallocLite is standaard ingeschakeld. Om het lek van MallocLite te onderzoeken, kunt u MallocLite uitschakelen:
(config)#no memory lite
Het gelekte geheugen staat nog steeds onder MallocLite tot de volgende herlading; nochtans, kunt u beginnen om verdere lekken met het gesorteerde geheugen van showprocessen te controleren en de bevelen van het geheugentoewijzend-proces tonen totalen. De lekken zullen nu onder het echte proces verschijnen.
Als het apparaat zeer laag op geheugen loopt, moet u de configuratie opslaan en het apparaat opnieuw laden om het geheugen vrij te geven:
#wr
#reload
Het geheugen kan in de loop van de tijd weer uitputten, dus gebruik de show processen geheugen gesorteerd en toon geheugen allocating-proces totalen opdrachten om het geheugen gebruik vanaf dat punt vooruit te controleren.
Opmerking: Als u MallocLite met de opdracht no memory lite effectief uitschakelt en het apparaat opnieuw laadt, zal de uitvoer van de opdracht show memory lite-chunks leeg zijn.
Raadpleeg de opdrachtreferentie voor meer informatie over de opdracht memory lite.