目录

简介

先决条件

要求

使用的组件

背景信息

IOS XE路由器内存耗尽的症状

TAC初始分类所需信息

了解高内存使用率

EEM监控内存利用率

触发器

核心文件

简介

本文档介绍收集内存泄漏问题的其他信息的一般故障排除提示。

先决条件

要求

Cisco 建议您具有以下主题的基础知识：

- Cisco IOS® XE基础知识

- 嵌入式事件管理器(EEM)中的基础知识

使用的组件

本文档不限于特定的软件和硬件版本。它适用于任何路由Cisco IOS XE平台，如ASR1000、ISR4000、ISR1000、Cat8000或Cat8000v。

本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始（默认）配置。如果您的网络处于活动状态，请确保您了解所有命令的潜在影响。

背景信息

在本文档中，您可以找到设备在高内存使用率情况下生成的常见日志。

此外，您还可以看到如何利用嵌入式事件管理器功能帮助TAC监控和获取IOS XE路由器经常内存不足的情况的数据。

本文档不全面介绍任何故障排除过程（如果有的话），但仅提供更深入的故障排除指南参考。

IOS XE路由器内存耗尽的症状

通常，在处理高内存使用率问题时，您会看到一条日志消息，指示已达到85%的警告限制。此值因版本而异。 根据系统发现问题的位置，会生成不同的日志：

TCAM问题：

CPP_FM-3-CPP_FM_TCAM_WARNING

IOSd（控制平面）：

SYS-2-MALLOCFAIL

SYS-2-CHUNKEXPANDFAIL

SYS-4-CHUNKSIBLINGSEXCEED

QFP（数据平面）：

QFPOOR-4-LOWRSRC_PERCENT_WARN

QFPOOR-4-TOP_EXMEM_USER

CPPEXMEM-3-NOMEM

CPPEXMEM-3-TOPUSER

临时文件系统(TMPFS)：

PLATFORM-3- ELEMENT_TMPFS_WARNING

常规系统日志（需要隔离）：

PLATFORM-4-ELEMENT_WARNING

PLATFORM-3-ELEMENT_CRITICAL

注意：从16.12版及更高版本开始提供日志改进。

TAC初始分类所需信息

- 命令输出：

show clock

show version

显示平台资源

show platform software status control-processor brief

show process memory sorted

show memory statistics

show memory allocating-process totals

show process memory platform sorted

show logging

- 如果由于内存不足而发生意外重新加载：

核心文件/系统报告

- 一段时间的内存使用率图。

附加show tech是理想之选，它对TAC很有帮助，您可以从TAC开发的帮助您更快发现问题的自动化中获益。

导致高内存使用率的条件始终与软件相关。但是，并非所有高内存使用率实例都是意外情况。必须考虑可用的DRAM和设备上运行的功能的组合。

如果您使用Radkit，对内存利用率过高进行故障排除会更顺利、更有效，并且具有更好的TAC交互。此工具由思科开发，可为TAC提供高度安全且简便的方法来访问您在网络中选择的设备。有关详细信息，请访问：Cisco RADKit

注意：请确保您运行的是受支持的版本。查找该版本的销售终止和生命周期终止文档。如果需要，请移动到当前处于软件维护版本下的版本。否则，TAC在故障排除和解决方法选项方面会受到限制。

有关内存故障排除的完整文档，请参阅以下指南：

关于ISR4K：Cisco 4000系列ISR内存故障排除指南。

关于ASR1K：ASR 1000系列路由器内存故障排除指南。

了解高内存使用率

在Cisco IOS XE路由器中，DRAM是支持核心功能的最重要资源之一。DRAM用于存储对控制平面和数据平面操作至关重要的不同数据类型和进程/功能信息。

DRAM在IOS XE路由器中的主要用途包括：

IOSd内存（控制平面结构）：存储与设备控制平面相关的进程相关信息，例如：路由信息/协议、网络管理结构、系统配置和功能信息。

QFP内存（数据平面结构）：存储有关微码处理的QFP操作的所有内容，例如QFP中存储的关键功能结构、微码指令和转发指令。

临时文件系统(TMPFS)：安装在DRAM中并由IOSd管理，TMPFS充当进程所需文件的快速访问存储区域。如果这些文件是永久性的，则将其移动到硬盘/bootflash。它通过减少临时数据的读/写次数来增强系统性能。

在Linux内核上运行的常规进程：由于IOS XE在基于Linux的内核上运行，因此DRAM还支持在此内核上运行的各种系统进程。

内存利用率高于85%通常表示显著的DRAM消耗，这可能会影响路由器性能。这种高使用率可能是由于合理需求（例如存储大量路由表或启用资源密集型功能）所致。但是，它也会发出信号来指示某些功能导致的内存管理效率低下或内存泄漏等问题，这些问题会在使用后导致内存无法正确释放回系统。

通过监控IOSd内存、QFP内存、TMPFS和常规Linux进程的内存利用率，您和TAC可以及早发现潜在问题。

EEM监控内存利用率

对于内存故障排除，TAC需要在一段时间内收集一组命令以识别违规进程。有时，在查明故障进程后，还需要其它特定命令，从而使内存故障排除成为最耗时的故障排除类型之一。

为了简化此故障排除，您可以使用EEM功能监控和自动收集信息。编写EEM脚本时需要考虑两个主要因素：触发器和要收集的命令。

触发器

模式。您可以使用“Cisco IOS XE路由器内存耗尽的症状”部分的模式。格式如下所示：

event syslog pattern <pattern> ratelimit 300 maxrun 180

使用模式作为触发器的注意事项之一是，一旦达到警告阈值，就会生成日志，具体取决于内存消耗率，如果您或TAC没有足够的时间进行更详细的故障排除，则尝试手动执行此操作。

Cron计时器。 每30分钟激活一次cron计时器的示例：

event timer cron name HalfHour cron-entry "*\30 * * * "

Cron计时器相对于模式的一个优点是，您无需等到设备几乎耗尽内存资源才能收集信息。根据内存消耗率，通过适当的监控和信息，TAC可以在达到警告阈值之前识别违规的进程。

注意：Ratelimit和maxrun选项用于保证收集整个输出集。它们还有助于在短期内出现多个日志的情况下避免其他噪音或EEM激活。

初始分类中使用常规命令的EEM示例：

configure terminal

event manager applet TAC_EEM authorization bypass

event syslog pattern " PLATFORM-4-ELEMENT_WARNING" ratelimit 300 maxrun 180

action 0.1 cli command "enable"

action 0.2 cli command "term exec prompt timestamp"

action 0.3 cli command "term length 0"

action 0.4 cli command "show process memory platform sorted | append bootflash:TAC_EEM.txt"

action 0.5 cli command "show processes memory platform sorted location chassis 1 R0 | append bootflash:TAC_EEM.txt"

action 0.9 cli command "show platform resources | append bootflash:TAC_EEM.txt"

action 1.0 cli command "show platform software status control-processor brief | append bootflash:TAC_EEM.txt"

action 1.1 cli command "show clock | append bootflash:TAC_EEM.txt"

action 1.3 cli command "show platform software process memory chassis active r0 all sorted | append bootflash:TAC_EEM.txt"

action 1.5 cli command "show process memory platform accounting | append bootflash:TAC_EEM.txt"

使用Cron计时器每天监控：

configure terminal

event manager applet TAC_EEM2 authorization bypass

event timer cron name DAYLY cron-entry "0 0 * * *"

action 0.1 cli command "enable"

action 0.2 cli command "term exec prompt timestamp"

action 0.3 cli command "term length 0"

action 0.4 cli command "show process memory platform sorted | append bootflash:TAC_EEM2.txt"

action 0.5 cli command "show processes memory platform sorted location chassis 1 R0 | append bootflash:TAC_EEM2.txt"

action 0.6 cli command "show processes memory platform sorted location chassis 2 R0 | append bootflash:TAC_EEM2.txt"

action 0.9 cli command "show platform resources | append bootflash:TAC_EEM2.txt"

action 1.0 cli command "show platform software status control-processor brief | append bootflash:TAC_EEM2.txt"

action 1.1 cli command "show log | append bootflash:TAC_EEM2.txt"

action 1.2 cli command "show clock | append bootflash:TAC_EEM2.txt"

action 1.3 cli command "show platform software process memory chassis active r0 all sorted | append bootflash:TAC_EEM2.txt"

action 1.5 cli command "show process memory platform accounting | append bootflash:TAC_EEM2.txt"

有关命令的更全面列表，请参阅TAC初始分类所需信息部分的指南。

核心文件

当内存利用率达到临界水平时，操作系统可能会强制崩溃以便从该情况中恢复，从而生成包含核心文件的系统报告。

核心文件是在特定时间点崩溃的特定进程的完整内存转储。此核心文件对于TAC检查内存和分析源代码以了解进程意外重新加载/崩溃的情况和潜在原因至关重要。

核心文件可帮助TAC和开发人员查找问题的根本原因、调试并修复问题。

注意：虽然TAC和开发人员都在努力寻找根本原因，但有时故障是由网络事件或计时问题引起的，因此几乎无法在实验中重现该问题。

有关意外重新加载以及如何检索核心文件的详细信息，请参阅对使用TAC的Cisco IOS®平台中的意外重新加载进行故障排除。