Cisco IOS 和 NX-OS 软件 : Cisco IOS 15.1M&T

MALLOCFAIL错误和一般内存问题排除故障

2016 年 10 月 27 日 - 机器翻译
其他版本: PDFpdf | 英语 (2015 年 8 月 22 日) | 反馈

简介

在您开Cisco技术支持中心(TAC) Case或重新加载设备为了加快问题解决方法前,本文讨论在本地Cisco IOS的MALLOCFAIL错误,以及步骤采取和应收集的信息。本文不是详尽的,然而提供用于的一般使用指南为了排除故障内存问题用许多路由器和交换机。

贡献用布兰登林奇, Cisco TAC工程师。

MALLOCFAIL错误

内存问题表明自己用在交换机和路由器的几个方式。在许多情况下,经历内存错误的设备重新加载,在适当的数据收集前。

内存问题通常出现以在您的路由器或交换机日志的MALLOCFAIL错误的形式。因为他们提供“路标”处理调查,这些错误是重要。这是示例MALLOCFAIL错误:

%SYS-2-MALLOCFAIL: Memory allocation of 65536 bytes failed
from 0x60103098,
alignment 0
Pool: Processor  Free: 5453728  Cause: Memory fragmentation
Alternate Pool: None  Free: 0  Cause: No Alternate pool

注意的第一件事是多少内存您需要分配,并且多少空闲存储器您有。此示例显示方案您必须从有仅5.45MB近似释放的池的地方分配65KB。输出表明,即使有足够的可用存储器,最大的邻近块小于65KB和失败的存储器分配。当,根据定义,这认为存储器分段时,这通常不是原因。经常,它是由低内存的池造成的。

注意的第二件事是池类型。prevoius示例处理处理器池。这是重要,因为它是处理调查的第一个路标,并且什么需要被检查。池指定应该是处理器I/O。这是I/O内存错误的示例:

%SYS-2-MALLOCFAIL: Memory allocation of 65548 bytes failed from 0x400B8564, 
alignment 32
Pool: I/O  Free: 39696  Cause: Not enough free memory
Alternate Pool: None  Free: 0  Cause: No Alternate pool

以下部分进一步选派这些池。一旦池识别,您在正确地点能相应地集中您的努力。

处理器池

处理器池使用,当名称暗示,在路由器或交换机运行的多种进程。有强调多数Cisco IOS版本和平台使用内存的特定进程。例如, Init是在多数设备启动设立的进程,并且在多种平台间是存在。也许是存在的其他进程根据各台设备的配置。例如,在语音配置和使用的平台,特定语音的进程浪费内存,而在没有语音的概括的配置方面,这些进程不保持一样,或者所有内存。

某些进程比其他保持更多的内存。如果有关于一特定的进程的问题或考虑,开TAC案例安排它调查是最佳的。

原因和怎样收集

  1. 如果设备最近经过Cisco IOS升级,检查的第一件事是新的镜像的最低要求的DRAM。这比在设备DRAM安装的相当数量应该是相等与或较少。最低要求的DRAM是列出的在软件下载工具内的镜像下。输入show version命令为了确认DRAM安装的相当数量:
    Cisco 2821 (revision 53.51) with 210944K/51200K bytes of memory.

    为了确定总DRAM,请添加这些编号。此特定的Cisco路由器有DRAM 256MB。

  2. 另一个可能的原因是Cisco IOS bug造成的内存泄漏。在这种情况下,一进程浪费过量的内存,直到用尽。当内存是低为了收集信息时,请输入这些命令:
    show clock
    show mem stat
    show proc mem sorted
    show mem all totals
    show log

    show proc mem排序命令一览表所有进程按顺序从保持的最大的内存数量的降序对最低。识别最高的进程,但是排除Init。一旦调查完成,请查找进程ID (PID)在输出的左手边的该进程的,并且收集此信息:
    show proc mem <PID #>

    如果最高的进程是停止的,除上一个输出之外,请收集此信息:
    show mem dead totals
    show mem dead

    某些进程要求更加详细的调查,但是他们在本文没有报道。

  3. 当您用尽内存由于进程和配置在设备时,内存问题另一潜在原因遇到。此的一示例是边界网关协议(BGP)路由器。在某些情况下, BGP保持很多内存由于上路由的数量。这没有造成的是由Cisco IOS bug。必须被修改配置更正此问题为了达到最佳路由和减少内存消耗量

    如果是不确定的,请收集以前列出的输出(请排除显示mem停止的总计并且显示mem死),并且开TAC案例,因为此问题很可能将要求进一步调查。

I/O池

I/O池是指在show buffers命令看到的I/O缓冲区。这些缓冲区使用流程交换数据流,尤其,例如路由更新或广播。I/O内存是被分解为的池,在show buffers命令输出中显示。这些池根据数据包大小,允许根据需要的内存更有效的分配。

原因和怎样收集

  1. 检查的第一件事与I/O内存问题是Cisco IOS bug造成的一潜在的缓冲泄漏。这经常表明自己作为增加其相当数量缓冲区,无需发布他们回到I/O池的一个特定的池,一旦他们不再必要。这是此的示例:
     --------- show buffers --------

    Buffer elements:
         500 in free list (500 max allowed)
         3220350364 hits, 0 misses, 0 created

    Public buffer pools:
    Small buffers, 104 bytes (total 6144, permanent 6144):
         3867 in free list (2048 min, 8192 max allowed)
         248913132 hits, 0 misses, 0 trims, 0 created
         0 failures (0 no memory)
    Medium buffers, 256 bytes (total 86401, permanent 3000, peak 86401 @ 05:18:11):
         0 in free list (64 min, 3000 max allowed)
         9697361 hits, 203293 misses, 2208 trims, 85609 created
         167633 failures (651288 no memory)
    Middle buffers, 600 bytes (total 512, permanent 512):
         0 in free list (64 min, 1024 max allowed)
         9284431 hits, 237750 misses, 0 trims, 0 created
         224619 failures (680486 no memory)
    Big buffers, 1536 bytes (total 1000, permanent 1000):
         0 in free list (64 min, 1000 max allowed)
         69471745 hits, 895218 misses, 0 trims, 0 created
         842142 failures (1821074 no memory)
    VeryBig buffers, 4520 bytes (total 10, permanent 10, peak 122 @ 1w3d):
         0 in free list (0 min, 100 max allowed)
         2120517 hits, 1632477 misses, 112 trims, 112 created
         1632421 failures (3272987 no memory)
    Large buffers, 9240 bytes (total 8, permanent 8, peak 18 @ 1w3d):
         0 in free list (0 min, 10 max allowed)
         9593 hits, 832217 misses, 44 trims, 44 created
         832195 failures (1651309 no memory)
    Huge buffers, 18024 bytes (total 2, permanent 2):
         0 in free list (0 min, 4 max allowed)
         1325 hits, 831497 misses, 0 trims, 0 created
         831494 failures (1649904 no memory)

    上一个输出清楚显示问题是中等池。其总值高于为该池设置的永久性数量。输出显示,用在池的86,000缓冲区,您有0联机在可用列表。最后,输出显示修整数量比创建的编号是更低,表明这些未发布回到进一步消耗的I/O池。关于这些字段的进一步说明,请参阅定义关于缓冲池在相关信息部分的菲尔茨链路在本文结束时。

    对于此方案,首先请获取这些输出:
    show clock
    show mem stat
    show buffers
    show log

    一旦确定有问题的池或池,请输入此命令为了着重问题池:
    show buffer pool <pool name> packet

    此命令也许提供广泛的输出。您能通常确定哪些数据包位于这些缓冲区,并且谁在输出的一些个页内分配了他们。

  2. 另一个可能的原因是网络/流量事件。这经常表明自己作为在多个池的额外的利用率。与显示此利用率的池的show buffer pool <pool name> packet命令输出一起推荐上一个输出收集,并且您开TAC案例。这经常是由必须由设备进程交换的一异常或意外的通信流导致的。由于流也许突变性和快速,您能相对用尽在短时间内的I/O内存。为了排除故障此种问题,您必须通常识别流量的来源为了发现此流是否是异常的,并且,如果那样,排除或者阻塞它。

  3. 别的,更加少见的事件是一个特定池是大量使用由于在网络环境必要的某一流量。此流量在网络也许,由于某种原因,需要进程交换和没有办法避免此。必须进一步确认此方案,必须然后采取适当行为。从step1的同样输出应用此处。

调查的项目

在多数路由器上,以前被提交的MALLOCFAIL错误示例标准。在Cisco Catalyst 6500系列交换机和7600系列路由器上有Supervisor引擎(Sup)或路由交换机处理器的(RSPs),这些错误也许变化。例如,此错误从路由处理器(RP)被采取了注册6500系列交换机:

%SYS-SP-2-MALLOCFAIL: Memory allocation of 820 bytes failed from 0x40C83B60,
alignment 32
Pool: I/O  Free: 48  Cause: Not enough free memory
Alternate Pool: None  Free: 0  Cause: No Alternate pool

MALLOCFAIL错误显示SUP的交换机处理器(SP)报告问题,不是RP。如果问题关联与RP,在错误的SP指定不存在。为此,必须从SP采取上一个输出。为了完成此,请先于命令与:

remote command switch

错误消息也许也参考待机SUP/RSP RP或SP如表示由STDBY和需要相应地收集。

摘要

如果收集在本文,列出的输出您也许加速案件解决方法和给您的设备迅速带来稳定性。如果任何问题出现或,如果有关于内存性能的不确定性在设备,开TAC案例为了安排它调查是最佳的。

相关信息



Document ID: 116467