Einleitung
Dieses Dokument beschreibt ein Speicherleck im Zusammenhang mit einem Cisco Catalyst 9800 Wireless LAN Controller (WLC).
Speicherleck
Weist ein Programm oder Prozess Speicher für die vorübergehende Verwendung zu und gibt ihn nicht korrekt frei, wenn er nicht mehr benötigt wird, bleibt dieser Speicher aus Sicht des Betriebssystems "belegt". Wenn der Prozess weiterläuft und wiederholt keinen Speicher freizugeben vermag, wächst die vom Prozess insgesamt genutzte Speichermenge, und für andere Prozesse und Systemfunktionen steht weniger Speicher zur Verfügung. Speicherlecks werden normalerweise durch Softwarefehler oder Probleme in der System-Firmware oder den darauf ausgeführten Anwendungen verursacht.
Bei einem Cisco Catalyst 9800 WLC kann sich ein Speicherleck wie folgt manifestieren:
- Verringerte Leistung: Da immer mehr Arbeitsspeicher knapp wird, verlangsamt sich der WLC möglicherweise, was zu langsameren Reaktionszeiten bei Managementfunktionen oder einer geringeren Leistung der mit dem Netzwerk verbundenen Client-Geräte führt.
- Systeminstabilität: Kritische Prozesse können zu Fehlern führen und möglicherweise dazu, dass Clientverbindungen unterbrochen werden, der WLC nicht verwaltet werden kann oder andere unberechenbare Verhaltensweisen auftreten.
- Systemabstürze: In schwerwiegenden Fällen kann der WLC abstürzen und neu starten, insbesondere wenn nicht genügend Arbeitsspeicher für wichtige Vorgänge zur Verfügung steht.
Hinweis: Bei 9800 WLC kann es zu einem plötzlichen Neustart/Absturz kommen, um den ausgelaufenen Speicher zurückzugewinnen und sich selbst wiederherzustellen. Da ein Speicherleck ein fehlerhaftes Verhalten ist, treten Lecks auch nach einem Neustart auf, es sei denn, das Leck, das die Konfiguration/Funktion verursacht, ist deaktiviert.
Syslog
%PLATFORM-4-ELEMENT_WARNUNG:R0/0: smand: Verwendeter RP/0-Speicherwert 91 % überschreitet Warnstufe 88 %
Diese Meldung druckt den Namen des Prozesses mit den drei höchsten Speicherbelegungen zusammen mit dem Ablaufverfolgungsschlüssel, der Anrufstandort-ID und Diff-Aufrufen:
%PLATFORM-4-ELEMENT_WARNUNG: Chassis 1 R0/0: smand: 1/RP/0: Gebrauchter Speicherwert 91 % überschreitet den Warnwert 88 %. Die wichtigsten Speicherzuweisungen sind: Prozess: sessmgrd_rp_0. Tracekey: 1#258b8858a63c7998252e96352473c9c6, Anrufstandort-ID: 11B8F825A8768000 (diff_call: 20941). Prozess: fman_fp_image_fp_0. Tracekey: 1#36b34d8e636a89f6397a3b12acab9706, Anrufstandort-ID: 1944E78DF68EC002 (diff_call: 19887) Prozess: linux_iosd-imag_rp_0. Tracekey: 1#8ec74901dc8e23a44e060e69d5820ece, Anrufstandort-ID: E2AA338E11594003 (diff_call: 13404).
Identifizierung von Speicherverlusten beim 9800 WLC
Speicherlecks müssen schnell behoben werden, da sie die Stabilität und Zuverlässigkeit der vom WLC bereitgestellten Netzwerkdienste beeinträchtigen können. Um ein Speicherleck auf einem WLC zu diagnostizieren, können Sie verschiedene Befehle in der CLI verwenden, um die Speichernutzung über einen längeren Zeitraum zu überwachen. Möglicherweise suchen sie nach Prozessen, die eine zunehmende Speichermenge nutzen, ohne sie freizugeben, oder nach Mustern, die darauf hinweisen, dass Speicher nicht wie erwartet wiederhergestellt wird.
Überprüfen Sie, wie viel Speicher der Plattform insgesamt zugewiesen ist.
9800WLC#show version | in memory
cisco C9800-L-F-K9 (KATAR) processor (revision KATAR) with 1634914K/6147K bytes of memory.
32768K bytes of non-volatile configuration memory.
16777216K bytes of physical memory.
!! Determines Total platform memory available, Here it is 16GB
Überprüfen Sie, wie viel Speicher jedem Pool zugewiesen ist.
9800WLC#show processes memory
Processor Pool Total: 1674013452 Used: 823578520 Free: 850434932
reserve P Pool Total: 102404 Used: 88 Free: 102316
lsmpi_io Pool Total: 6295128 Used: 6294296 Free: 832
Überprüfen Sie die Ressourcennutzung, einschließlich der Speichernutzung. Wenn der Wert die Warnstufe oder die Stufe Kritisch überschreitet, kann dies auf ein potenzielles Speicherleck hinweisen.
Speichernutzung auf 9800 WLC
Überwachung der gesamten Speichernutzung für Ressourcen auf Kontrollebene
9800WLC#show platform software status control-processor brief
Slot Status 1-Min 5-Min 15-Min
1-RP0 Healthy 0.52 0.75 0.80
Memory (kB)
Slot Status Total Used (Pct) Free (Pct) Committed (Pct)
1-RP0 Healthy 16327028 4898110(30%) 114218918 (70%) 5387920 (33%)
Überwachen Sie die zugewiesene und verwendete Speichergröße für die Hauptprozesse. Wenn die Speichernutzung weiter zunimmt, während der freie Speicher unverändert bleibt oder zu niedrig ist, besteht auf IOSd-Ebene eine hohe Wahrscheinlichkeit eines Speicherverlusts.
Speicherstatistiken pro Prozess, beginnend mit dem höchsten Halteprozess
Bei Speicherverlusten auf Plattformebene sollten Sie die RSS-Zähler (Resident Set Size) überwachen. RSS gibt die Speichermenge an, die einem Prozess während der Ausführung zugewiesen wurde. Wenn dieser Wert schnell ansteigt, kann dies auf ein potenzielles Speicherleck hinweisen.
Die Plattform verarbeitet die Speichernutzung aus dem Prozess mit der höchsten Speicherkapazität.
Fehlerbehebung: Speicherleck im IOS-Prozess
In IOS XE arbeitet IOS als ein Prozess (Daemon), der auf dem Linux-Kernel ausgeführt wird, der als IOSd bezeichnet wird. In der Regel wird IOSd zwischen 35 % und 50 % des insgesamt verfügbaren Plattform-DRAMs zugewiesen.
Grundlegende Protokolle von WLC
Aktivieren Sie Zeitstempel, um eine Zeitreferenz für alle Befehle zu erhalten.
9800WLC#term exec prompt timestamp
So überprüfen Sie die Konfiguration und die speicherbezogenen Informationen:
9800WLC#show tech-support wireless
9800WLC#show tech-support memory
Sammeln der Core Dump-Datei oder des Systemberichts, falls generiert
Über GUI
Navigation nach Troubleshooting > Core Dumps and System Report
Bericht zu Core Dump und System
Über CLI
9800WLC#show bootflash: | in core/system-report
9800WLC#copy bootflash:system-report/Core_file {tftp: | ftp: | https: ..}
Für Prozessorspeicherpool
Prüfen Sie den Speicher pro Prozess ab dem höchsten Haltevorgang.
9800WLC#show process memory sorted
Überprüfen Sie die Gesamtspeicherstatistiken für den betreffenden Pool. Außerdem werden der größte freie Block und der niedrigste verfügbare Speicher seit dem Start angezeigt.
9800WLC#show memory Statistics
Überprüfen Sie den Programmzähler (PC), der eine große Speichermenge zugewiesen hat.
9800WLC#show memory allocation-process totals
Überprüfen Sie undichte Blöcke und Blöcke.
9800WLC#show memory debug leak chunks
!!This is CPU intensive cli and use only if above CLI output is not helping.
Für IO-Speicherpool
Prüfen Sie die obersten Zuteilungen.
9800WLC#show memory io allocating-process totals
Wenn der oberste Zuweiser 'Paketdaten oder Pool-Manager' ist, prüfen Sie, welcher caller_pc eine große Anzahl von Puffern angefordert hat.
9800WLC#show buffers
9800WLC#show buffers usage
Wenn die oberste Zuweisung 'mananged_chunk_process()' oder der oberste 'Chunk Manager' Prozess erfolgt, bedeutet dies, dass ein oder mehrere Blöcke eine große Speichermenge zuweisen.
9800WLC#show chunk summary
9800WLC#show chunk brief
Wenn der Prozess MallocLite ist der Top-Allocator
9800WLC#show memory lite-chunks totals
9800WLC#show memory lite-chunks stats
Fehlerbehebung Speicherleck auf Polaris-/Plattformebene
Überprüfen Sie die Speichernutzung % auf verfügbare Speicherressourcen auf der Plattform.
9800WLC#show Platform resources
Überprüfen Sie den gesamten Systemspeicher-Snapshot.
9800WLC#show platform software process slot chassis active R0 Monitor | in Mem
Überprüfen Sie alle Plattformprozesse nach Speicher sortiert.
9800WLC#show process memory platform sorted
9800WLC#show platform software process memory chassid active r0 all sorted
Überprüfen Sie den Status der Anrufstandorte für die letzte Stunde.
9800WLC#show process memory platform accounting
Wählen Sie aus den beiden vorherigen CLI-Ausgaben den oberen Contender aus, und aktivieren Sie die Debugging-Funktionen für die einzelnen Prozesse.
9800WLC#debug platform software memory <process> chassis <1-2/active/standby> R0 alloc callsite stop
9800WLC#debug platform software memory <process> chassis <1-2/active/standby> R0 alloc callsite clear
9800WLC#debug platform software memory <process> chassis <1-2/active/standby> R0 alloc backtrace start <CALL_SITE> depth 10
9800WLC#debug platform software memory <process> chassis <1-2/active/standby> R0 alloc callsite start
!! Running these debugs has no impact to device
Erfassen Sie die Ausgabe einige Minuten (15 Minuten bis eine Stunde) nach dem Initiieren der Fehlersuche.
9800WLC#show platform software memory <process> chassis <1-2/active/standby> R0 alloc backtrace
!! Capture this output three times, with a 5-10 minutes interval between each capture, to identify the pattern.
Überprüfen Sie, ob call_diff vorhanden ist, und weisen Sie den Wert mit dem entsprechenden Backtrace für jeden Prozess zu bzw. geben Sie ihn frei.
9800WLC#show platform software memory <process> chassis <1-2/active/standby> R0 alloc callsite brief
Hinweis: call_diff = allocs - free
Wenn allocs = frees, kein Speicherleck
Wenn Frei = 0, Speicherleck
Wenn Allocs != frei sind, vielleicht oder vielleicht nicht, ein Speicherleck sein (Wenn call_diff mehr ist, weist dies auf hohe Wahrscheinlichkeit eines Speicherlecks hin)
Erfassen von Daten des Datenbankspeichers für einen einzelnen Prozess.
9800WLC#show platform software memory <process> chassis <1-2/active/standby>active R0 alloc type data brief
9800WLC#show platform software memory database <process> chassis <1-2/active/standby> chassis active R0 brief
Überprüfen Sie die Systembereitstellungsinformationen, um die Speichernutzung für das temporär erstellte virtuelle Dateisystem zu überprüfen.
9800WLC#show platform software mount
Empfehlung
Empfehlungen zu Arbeitsspeicher und Skalierungsbeschränkungen finden Sie in den entsprechenden Konfigurationsanleitungen, Datenblättern und Versionshinweisen. Stellen Sie sicher, dass der WLC auf die neueste empfohlene Version aktualisiert wird.