Introduction
本文描述如何排除MallocLite在Cisco IOS软件平台的存储器泄漏故障。
它也指定您应该收集的信息,在您开Cisco技术支持中心(TAC) Case或重新载入设备前。收集在本文提及的输出,并且附有他们到TAC案例为了帮助加快问题解决方法。
背景信息
内存管理器用于MallocLite为了分配内存小,固定尺寸的部分,叫作大块,分配的小于或等于128个字节。小的存储器分配没有一个块首的开销每个分配的。此功能为仅处理器内存池支持。
每个存储器块报头取走大约48内存字节数,并且最小的块取走大约24个字节。使用在Cisco IOS软件的一传统方法的每个分配,您会消耗至少72 (48 + 24)内存字节数,即使您只需要分配8字节的实际数据。
使用MallocLite,此开销可以减少使用大块。因为大块必须被管理,仍有若干开销。然而,因为大块是固定尺寸的,他们与块不同方式被管理,并且开销是较少。
是使用MallocLite内存适当地释放它应用程序的责任。MallocLite屏蔽内存的用户。
Troubleshoot
Note: 思科 CLI 分析器(仅适用于注册客户)支持某些 show 命令。要查看对 show 命令输出的分析,请使用思科 CLI 分析器。
识别应用程序负责对泄漏
如果由malloclite关键字,仅搜索识别一个现有的Bug通常是难的。
此示例表示, *MallocLite*进程暂挂一异常内存数量:
#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*
您需要识别对泄漏负责的确切的应用程序。三个可能的证明方法是:
- 解码分配程序PC。
- 调查MallocLite内存统计数据。
- 禁用MallocLite。
解码分配程序PC
与MallocLite打开了,您能通常看到什么作用请求内存。show memory allocating-process totals命令威力的输出显示不同的PC值,即使报告的名字是MallocLite :
#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
Cisco TAC工程师能从列表的顶端解码PC值(与最高的总数)。这帮助识别有存储器泄漏的应用程序。
调查MallocLite内存统计数据
在Cisco IOS软件版本添加的增进中显示每个PC分配的MallocLite内存汇总的15.1T是新的CLI。show memory轻大块命令可帮助您识别使用很多MallocLite块的应用程序。
show memory lite-chunks { statistics | totals } { summary { pool | { all | pool } } }
请参见命令参考关于show memory轻大块命令的详细资料。
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
输出示例此include命令的:
#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
再次, TAC工程师能解码PC值以最高总和识别漏内存的应用程序。
功能失效MallocLite
默认情况下MallocLite功能被启用。为了调查MallocLite泄漏,您能禁用MallocLite :
(config)#no memory lite
漏的内存在直到下一次重新加载的MallocLite下;然而,您能开始监控与被排序的show processes memory的进一步泄漏,并且show memory allocating-process共计命令。泄漏当前将出现在真正的流程下。
如果设备在内存非常低速运行,您必须保存配置和重新载入设备为了发布内存:
#wr
#reload
内存也许随着时间的推移再耗尽,因此请使用被排序的show processes memory,并且show memory allocating-process共计命令为了从那时起监控存储器使用。
Note:如果有效禁用MallocLite用没有内存轻命令并且重新载入设备, show memory轻大块命令的输出将是空的。
请参见命令参考关于内存轻命令的详细资料。