Einleitung
In diesem Dokument wird die Fehlerbehebung bei MallocLite-Speicherverlusten auf Cisco IOS®-Softwareplattformen beschrieben.
Außerdem werden darin die Informationen angegeben, die Sie sammeln sollten, bevor Sie ein Ticket beim Cisco Technical Assistance Center (TAC) erstellen oder das Gerät neu laden. Erfassen Sie die in diesem Dokument erwähnten Ausgaben, und fügen Sie sie dem TAC-Serviceticket bei, um die Problembehebung zu beschleunigen.
Hintergrundinformationen
MallocLite wird vom Speichermanager verwendet, um kleine, feste Speichereinheiten, so genannte Chunks, für Zuweisungen von weniger als oder gleich 128 Byte zuzuweisen. Kleinere Speicherzuweisungen haben nicht den Overhead eines Blockheaders für jede Zuweisung. Diese Funktion wird nur für Prozessor-Speicherpools unterstützt.
Jeder Header eines Speicherblocks benötigt etwa 48 Byte Speicher, der kleinste Block etwa 24 Byte. Bei einem herkömmlichen Ansatz der Cisco IOS-Software für jede Zuweisung würden Sie mindestens 72 Byte (48 + 24) Arbeitsspeicher belegen, selbst wenn Sie nur 8 Byte tatsächlich benötigte Daten zuweisen müssten.
Mit MallocLite kann dieser Overhead durch die Verwendung von Blöcken reduziert werden. Der Verwaltungsaufwand für die Chunks bleibt gering. Da die Chunks jedoch eine feste Größe haben, werden sie anders verwaltet als Blöcke, und der Overhead ist geringer.
Es liegt in der Verantwortung der Anwendungen, die den MallocLite-Speicher verwenden, um ihn richtig freizugeben. MallocLite maskiert den Benutzer des Speichers.
Fehlerbehebung
Hinweis: Der Cisco CLI Analyzer (nur registrierte Kunden) unterstützt bestimmte show-Befehle. Verwenden Sie den Cisco CLI Analyzer, um eine Analyse der Ausgabe des Befehls show anzuzeigen.
Identifizierung der Anwendung, die für den Leak verantwortlich ist
Es ist in der Regel schwierig, einen vorhandenen Fehler zu identifizieren, wenn Sie nur nach dem malloclite-Schlüsselwort suchen.
Dieses Beispiel zeigt, dass der *MallocLite*-Prozess eine ungewöhnliche Speichermenge enthält:
#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*
Sie müssen genau die Anwendung identifizieren, die für das Leck verantwortlich ist. Drei mögliche Identifizierungsmethoden sind:
- Decode Zuweiser PC.
- MallocLite-Speicherstatistiken untersuchen.
- Deaktivieren Sie MallocLite.
Decode-Zuweisungs-PC
Selbst wenn MallocLite eingeschaltet ist, können Sie in der Regel sehen, welche Funktion für den Speicher angefordert. Die Ausgabe des Befehls show memory allocation-process totals kann verschiedene PC-Werte anzeigen, auch wenn der angegebene Name MallocLite ist:
#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
Ein Cisco TAC-Techniker kann die PC-Werte aus der Liste oben dekodieren (mit der höchsten Gesamtsumme). Dies hilft bei der Identifizierung der Anwendung, die das Speicherleck aufweist.
MallocLite-Speicherstatistiken untersuchen
Zu den Neuerungen in Version 15.1T der Cisco IOS-Software gehörte eine neue CLI, die eine Zusammenfassung des von jedem PC zugewiesenen MallocLite-Speichers anzeigt. Mit dem Befehl show memory lite-chunks können Sie Anwendungen identifizieren, die eine große Anzahl von MallocLite-Blöcken verwenden.
show memory lite-chunks { statistics | totals } { summary { pool | { all | pool } } }
Weitere Informationen zum Befehl show memory lite-chunks finden Sie in der Befehlsreferenz.
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
Beispiele für die Ausgabe dieses Befehls:
#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
Auch hier kann der TAC-Techniker die PC-Werte mit der höchsten Gesamtzahl dekodieren und die Anwendung identifizieren, die den Speicher verlässt.
MallocLite deaktivieren
Die MallocLite-Funktion ist standardmäßig aktiviert. Um das MallocLite-Leck zu untersuchen, können Sie MallocLite deaktivieren:
(config)#no memory lite
Der ausgelesene Speicher bleibt bis zum nächsten Neuladen unter MallocLite; Sie können jedoch mit den Befehlen show processes memory sorted und show memory allocation-process totals weitere Lecks anzeigen. Die Lecks werden nun unter dem realen Prozess erscheinen.
Wenn auf dem Gerät sehr wenig Speicher verfügbar ist, müssen Sie die Konfiguration speichern und das Gerät neu laden, um den Speicher freizugeben:
#wr
#reload
Der Speicher kann im Laufe der Zeit wieder erschöpft sein. Verwenden Sie daher die Befehle show processes memory sorted und show memory allocation-process totals, um die Speichernutzung ab diesem Zeitpunkt zu überwachen.
Anmerkung: Wenn Sie MallocLite mit dem Befehl no memory lite effektiv deaktivieren und das Gerät neu laden, ist die Ausgabe des Befehls show memory lite-chunks leer.
In der Befehlsreferenz finden Sie Details zum Befehl memory lite.