简介
本文档介绍有关收集内存泄漏问题的其他信息的一般故障排除提示。
先决条件
要求
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
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提供高度安全且简便的方法来访问您在网络中选择的设备。有关更多的信息,访问:思科RADKit
注意:确保运行的是受支持的版本。查找该版本的销售终止和生命周期终止文档。如果需要,请移至当前软件维护版本下的版本。否则,TAC在故障排除和解决方案选项方面会受到限制。
有关内存故障排除的完整文档,请参阅以下指南:
在ISR4K上:Cisco 4000系列ISR的内存故障排除指南。
在ASR1K上:ASR 1000系列路由器内存故障排除指南。
了解高内存使用率
在Cisco IOS XE路由器中,DRAM是支持核心功能的最重要资源之一。DRAM用于存储对于控制平面和数据平面操作至关重要的不同数据类型和进程/功能信息。
IOS XE路由器中DRAM的主要用途包括:
IOSd内存(控制平面结构):存储与设备的控制平面相关的进程相关信息,例如:路由信息/协议、网络管理结构、系统配置和功能信息。
QFP内存(数据平面结构):存储有关微代码处理的QFP操作的所有内容,例如QFP中存储的关键功能结构、微代码指令和转发指令。
临时文件系统(TMPFS):TMPFS安装在DRAM中并由IOSd管理,充当进程所需文件的快速访问存储区域。如果这些文件是持久文件,则将其移至硬盘/引导闪存。它通过减少临时数据的读/写时间来提高系统性能。
在Linux内核上运行的常规进程:由于IOS XE在基于Linux的内核上运行,DRAM还支持在该内核上运行的各种系统进程。
内存利用率高于85%通常表示消耗大量的DRAM,这可能会影响路由器性能。这种高使用率可能是合法需求的结果,例如存储大量路由表或启用资源密集型功能。但是,它也会因某些功能或内存泄漏而导致内存管理效率低下或内存泄漏等问题,导致使用后内存无法正确释放回系统。
通过监控IOSd内存、QFP内存、TMPFS和常规Linux进程的内存利用率,您和TAC可以及早发现潜在问题。
EEM监控内存利用率
对于内存故障排除,TAC需要在一段时间内收集一组命令以确定违规过程。有时,在找出问题的原因后,还需要其它特定命令,从而使内存故障排除成为最耗时的故障排除类型之一。
为了简化此故障排除,您可以使用EEM功能监控和自动收集信息。编写EEM脚本时需要考虑两个主要因素:触发器和要收集的命令。
触发器
模式。您可以使用Cisco IOS XE路由器内存不足症状部分的模式。格式如下所示:
event syslog pattern <pattern> raterlimit 300 maxrun 180
使用模式作为触发器的注意事项之一是,一旦达到警告阈值(取决于内存消耗率)就生成日志,尝试手动执行此操作,您或TAC没有足够的时间进行更详细的故障排除。
Cron计时器。每30分钟激活一次cron计时器的示例:
事件计时器cron name HalfHour cron-entry "*\30 * * * "
Cron计时器相对于模式的优点之一是,您无需等到设备内存资源几乎耗尽后再收集信息。根据内存消耗率,通过适当的监控和信息,TAC可以在达到警告阈值之前识别违规进程。
注意:Raterlimit和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®平台中的意外重新加载进行故障排除。