簡介
本檔案介紹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 Callsite ID:11B8F825A8768000(diff_call:20941)。 程序:fman_fp_image_fp_0。跟蹤鍵:1#36b34d8e636a89f6397a3b12acab9706 Callsite ID:1944E78DF68EC002(diff_call:19887)。 程序:linux_Cisco 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%)
監控為頂部進程分配和使用的記憶體大小。如果在可用記憶體保持固定或過低的情況下記憶體使用率繼續增加,則在Cisco IOSd級別出現記憶體洩漏的可能性很高。
從最高保持進程開始的每進程記憶體統計資訊
對於平台級記憶體洩漏問題,監控駐留集大小(RSS)計數器。RSS指示在執行期間分配給進程的記憶體量。如果該值快速增加,則可能表示潛在的記憶體洩漏。
平台從最高保留進程處理記憶體使用
排除Cisco IOS®過程中的記憶體洩漏故障
在Cisco IOS XE中,Cisco IOS作為在Linux核心(稱為Cisco IOSd)上運行的進程(守護程式)運行。通常,Cisco 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
如果頂部分配器是Packet Data或Pool Manager ,請檢查哪個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
chassis <1-2/active/standby> R0 alloc callsite stop
9800WLC#debug platform software memory
chassis <1-2/active/standby> R0 alloc callsite clear
9800WLC#debug platform software memory
chassis <1-2/active/standby> R0 alloc backtrace start
depth 10
9800WLC#debug platform software memory
chassis <1-2/active/standby> R0 alloc callsite start
!! Running these debugs has no impact to device
在啟動調試後幾分鐘(15分鐘到一小時)收集輸出。
9800WLC#show platform software memory
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
chassis <1-2/active/standby> R0 alloc callsite brief
附註:call_diff = allocs — 自由
如果allocs =釋放,則無記憶體洩漏
如果釋放= 0,記憶體洩漏
如果allocs!=釋放,則可能是也可能不是記憶體洩漏(如果call_diff更大,則表明記憶體洩漏的機率很高)
捕獲單個進程的資料庫記憶體資料。
9800WLC#show platform software memory
chassis <1-2/active/standby>active R0 alloc type data brief
9800WLC#show platform software memory database
chassis <1-2/active/standby> chassis active R0 brief
檢查系統裝入資訊,以檢查臨時建立的虛擬檔案系統的記憶體使用情況。
9800WLC#show platform software mount
建議
請參閱相關組態設定指南、資料單和版本說明,瞭解記憶體建議和擴充限制,並確保WLC升級為最新的建議版本。
相關資訊