简介
本文档介绍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%。排名靠前的内存分配器包括:Process:sessmgrd_rp_0。跟踪键:1#258b8858a63c7998252e96352473c9c6 Callsite ID:11B8F825A8768000(diff_call:20941)。 Process:fman_fp_image_fp_0。跟踪密钥:1#36b34d8e636a89f6397a3b12acab9706 Callsite ID:1944E78DF68EC002(diff_call:19887)。 Process:linux_Cisco IOSd-imag_rp_0。跟踪密钥:1#8ec74901dc8e23a44e060e69d5820ece呼叫站点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分钟到1小时)收集输出。
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、allocs和frees值以及每个进程的相应回溯。
9800WLC#show platform software memory
chassis <1-2/active/standby> R0 alloc callsite brief
注意:call_diff =分配数 — 释放
如果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升级到最新的推荐版本。
相关信息