簡介
本檔案介紹Cisco Catalyst 9800無線LAN控制器(WLC)相關資訊環境中的記憶體洩漏。
記憶體洩漏
當程式或進程分配記憶體供臨時使用時,如果沒有在不再需要時正確取消分配記憶體,則從作業系統的角度來看,該記憶體將保持「使用中」狀態。由於進程繼續運行,並且反覆無法取消分配記憶體,該進程使用的記憶體總量會增加,並且可用於其他進程和系統功能的記憶體會減少。記憶體洩漏通常是由軟體錯誤或系統韌體或在其上執行的應用程式問題所造成。
在使用Cisco Catalyst 9800 WLC的情況下,記憶體洩漏可能如下所示:
- 效能降低:隨著記憶體越來越稀缺,WLC可能會變慢,從而導致管理功能的響應時間變慢,或者連線到網路的客戶端裝置的效能降低。
- 系統不穩定:關鍵進程可能會開始失敗,可能導致客戶端連線斷開、無法管理WLC或其他不穩定的行為。
- 系統崩潰:在嚴重情況下,WLC可能會崩潰和重新啟動,尤其是當它用盡了用於重要操作的記憶體時。
注意:9800 WLC可能會突然重新啟動/崩潰,以重新利用洩漏的記憶體並重新自己。由於記憶體洩漏是錯誤行為,因此即使重新啟動後也會發生洩漏,除非洩漏導致配置/功能被停用。
系統日誌
%PLATFORM-4-ELEMENT_WARNING:R0/0: smand: RP/0使用的記憶體值91%超過警告級別88%
此訊息會列印前3個記憶體使用處理作業的名稱,以及traceky、callsite ID和diff呼叫:
%PLATFORM-4-ELEMENT_WARNING:機箱1 R0/0: smand: 1/RP/0:已用記憶體值91%超過警告級別88%。最常使用的記憶體配置器為:處理序:sessmgrd_rp_0。追蹤金鑰: 1#258b8858a63c7998252e96352473c9c6呼叫網站ID: 11B8F825A8768000 (diff_call: 20941)。處理:fman_fp_image_fp_0。追蹤金鑰: 1#36b34d8e636a89f6397a3b12acab9706 Callsite ID: 1944E78DF68EC002 (diff_call: 19887)。處理程式:linux_iosd-imag_rp_0。追蹤金鑰: 1#8ec74901dc8e23a44e060e69d5820ece Callsite ID: E2AA338E11594003 (diff_call: 13404)。
如何確定9800 WLC遇到記憶體洩漏問題
請務必及時解決記憶體洩漏問題,因為此類洩漏可能會影響WLC提供的網路服務的穩定性和可靠性。要診斷WLC上的記憶體洩漏,可以在CLI上使用各種命令隨時間推移監控記憶體使用情況。他們可能會尋找使用不斷增加的記憶體而不釋放記憶體的程式,或尋找記憶體未如預期回收的模式。
檢查為平台分配的記憶體總量。
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
檢查每個池分配了多少記憶體。
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
檢查資源使用率,包括記憶體使用率。如果超過「警告」或「嚴重」等級,則可能表示潛在的記憶體洩漏。
9800 WLC上的記憶體利用率
監控整體記憶體使用狀況,以取得控制平面資源
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%)
監控常用進程的已分配和已用記憶體大小。如果在空閒記憶體保持固定或過低的情況下記憶體使用率繼續增加,則在IOSd級別出現記憶體洩漏的可能性很高。
每個進程從最高保持進程開始的記憶體統計資訊
對於平台級記憶體洩漏問題,請監控RSS(駐留集大小)計數器。RSS表示在執行過程中分配給進程的記憶體量。如果此值快速增加,則可能表示潛在的記憶體洩漏。
平台處理最高暫存處理序的記憶體使用
排除IOS進程記憶體洩漏故障
在IOS XE中,IOS作為在Linux核心上運行的進程(守護程式),稱為IOSd。通常,IOSd分配在可用平台DRAM總量的35%到50%之間。
WLC的基本日誌
啟用時間戳記,讓所有命令都有時間參照。
9800WLC#term exec prompt timestamp
檢視配置和記憶體相關資訊:
9800WLC#show tech-support wireless
9800WLC#show tech-support memory
收集核心傾印檔案或系統報告(若已產生)
透過GUI
導航至 Troubleshooting > Core Dumps and System Report
核心傾印與系統報告
透過CLI
9800WLC#show bootflash: | in core/system-report
9800WLC#copy bootflash:system-report/Core_file {tftp: | ftp: | https: ..}
對於處理器記憶體池
從最高保持進程開始按進程檢查記憶體。
9800WLC#show process memory sorted
檢查相關池的總記憶體統計資訊。它還顯示自啟動以來最大的可用塊和最低的可用記憶體。
9800WLC#show memory Statistics
檢查分配大量記憶體的程式計數器(PC)。
9800WLC#show memory allocation-process totals
檢查洩漏的塊和塊。
9800WLC#show memory debug leak chunks
!!This is CPU intensive cli and use only if above CLI output is not helping.
對於IO記憶體池
檢查頂端配置器。
9800WLC#show memory io allocating-process totals
如果頂部分配器是「資料包資料或池管理器」,請檢查哪個caller_pc請求了大量的緩衝區
9800WLC#show buffers
9800WLC#show buffers usage
如果頂層分配器是 'mananged_chunk_process()' 或'Chunk Manager' 進程,則意味著一個或多個資料塊正在分配大量記憶體。
9800WLC#show chunk summary
9800WLC#show chunk brief
如果進程MallocLite是頂級分配器
9800WLC#show memory lite-chunks totals
9800WLC#show memory lite-chunks stats
Polaris/平台級別的記憶體洩漏故障排除
檢查記憶體使用率%,以取得平台上的可用記憶體資源。
9800WLC#show Platform resources
檢查整體系統記憶體快照。
9800WLC#show platform software process slot chassis active R0 Monitor | in Mem
檢查已排序的所有平台進程記憶體。
9800WLC#show process memory platform sorted
9800WLC#show platform software process memory chassid active r0 all sorted
檢查呼叫站點的最後一個小時狀態。
9800WLC#show process memory platform accounting
從前兩個CLI輸出中選擇最上面的競爭者,然後啟用各個進程的調試。
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
在啟動調試後幾分鐘(15分鐘到1小時)內收集輸出。
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.
檢查call_diff,為每個進程分配並釋放具有相應回溯跟蹤的值。
9800WLC#show platform software memory <process> chassis <1-2/active/standby> R0 alloc callsite brief
註:call_diff = allocs -自由
如果allocs =釋放,則無記憶體洩漏
如果釋放= 0,則記憶體洩漏
如果分配!=釋放,則可能是也可能不是記憶體洩漏(如果call_diff更大,則表明記憶體洩漏的可能性很高)
擷取個別處理作業的資料庫記憶體資料。
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
檢查系統掛載資訊,以檢查暫時建立的虛擬檔案系統的記憶體使用狀況。
9800WLC#show platform software mount
建議
有關記憶體建議和擴展限制,請參閱相關配置指南、資料表和發行版本註釋,並確保WLC升級到最新推薦版本。