路由器 : 思科 2900 系列集成多业务路由器

MallocLite内存泄漏排除故障

2015 年 8 月 28 日 - 机器翻译
其他版本: PDFpdf | 英语 (2015 年 4 月 23 日) | 反馈

简介

本文描述如何排除故障在Cisco IOS软件平台的MallocLite内存泄漏。

它也指定您应该收集的信息,在您开Cisco技术支持中心(TAC) Case或重新加载设备前。收集在本文提及的输出,并且附加他们到TAC案例为了帮助加快问题解决方法。

贡献用米哈拉Stanczyk和大卫陈, Cisco TAC工程师。

背景信息

内存管理器用于MallocLite为了分配内存小,固定尺寸的片段,叫作大块,分配的小于或等于128个字节。小存储器分配没有一个块首的开销每个分配的。此功能为仅处理器内存存储池支持。

每个存储器块块首取走大约48内存字节数,并且最小的块取走大约24个字节。使用一传统方法在每个分配的Cisco IOS软件方面,您会消耗至少72 (48 + 24)内存字节数,即使您只需要分配8字节的实际数据。

使用MallocLite,此开销可以减少使用大块。因为大块必须被管理,仍有若干开销。然而,因为大块是固定尺寸的,他们与块不同方式被管理,并且开销是较少。

是使用MallocLite内存适当地释放它应用程序的责任。MallocLite屏蔽内存的用户。

故障排除

注意

使用命令查找工具仅限注册用户)可获取有关本部分所使用命令的详细信息。

命令输出解释程序工具仅限注册用户)支持某些 show 命令。请使用Output Interpreter Tool为了查看show命令输出分析。

识别应用程序负责对泄漏

如果由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共计命令为了从那时起监控内存使用。

注意:如果有效禁用MallocLite用没有内存轻命令并且重新加载设备,从show memory轻大块命令的输出将是空的。

参考命令参考关于内存轻命令的详细信息。


相关的思科支持社区讨论

思科支持社区是您提问、解答问题、分享建议以及与工作伙伴协作的论坛。


Document ID: 117517