简介
本文档介绍在服务请求和思科工具中看到的XML内存限制问题。
先决条件
要求
Cisco 建议您了解以下主题:
- Cisco IOS® XR平台
- XML(可扩展标记语言)基础设施
- 公共对象请求代理体系结构(CORBA)
- 元件管理系统(EMS)
- 外部数据管理器(EDM)
使用的组件
本文档中的信息基于ASR9000。
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您的网络处于活动状态,请确保您了解所有命令的潜在影响。
限制内存问题
立案时提出了以下问题:
- 路由器上可配置的最大内存是多少?
- 是否有办法中断大量XML回复?
回答:
- 最大内存更改取决于RSP/节点运行的版本(cXR和eXR的版本)
64位版本(eXR)。 您有一个限制内存大小:
RP/0/RSP1/CPU0:XR#show version
Wed Jul 26 21:10:16.761 IST
Cisco IOS XR Software, Version 7.1.3
Copyright (c) 2013-2020 by Cisco Systems, Inc.
Build Information:
Built By : gopalk2
Built On : Thu Nov 26 10:51:48 PST 2020
Built Host : iox-ucs-027
Workspace : /auto/srcarchive17/prod/7.1.3/asr9k-x64/ws
Version : 7.1.3
Location : /opt/cisco/XR/packages/
Label : 7.1.3
cisco ASR9K () processor
System uptime is 2 weeks 17 hours 22 minutes
RP/0/RSP1/CPU0:XR# configuration
RP/0/RSP1/CPU0:XR(config)#xml agent throttle ?
memory Memory usage
process-rate Process rate
RP/0/RSP1/CPU0:XR(config)#xml agent throttle memory ?
<100-1024> Size of the memory usage in Mbytes per session (default 300 Mbytes)
32位版本(cXR)。 您还有另一个限制:
RP/0/RSP0/CPU0:XR#show version
Cisco IOS XR Software, Version 6.4.2[Default]
Copyright (c) 2020 by Cisco Systems, Inc.
ROM: System Bootstrap, Version 10.59(c) 1994-2014 by Cisco Systems, Inc.
Configuration register on node 0/RSP0/CPU0 is 0x102
Boot device on node 0/RSP0/CPU0 is disk0:
RP/0/RSP0/CPU0:XR# configuration
RP/0/RSP0/CPU0:XR(config)#xml agent throttle memory ?
<100-600> Size of the memory usage in Mbytes per session (default 300 Mbytes)
2.有多种方法可以中断XML回复:
配置迭代器时,您会将XML总响应划分为特定窗口大小。窗口具有迭代器大小。例如,如果响应为1 Gb,迭代器大小为500 Mb,则可以将XML分段为2个应答。
此方法通过添加(基于迭代器大小)GetNext操作(响应所需的操作)来更改响应。
一个会话最多可以有10个迭代器。
此功能限制了XML进程占用的内存。如果某个进程超出内存,它会回复以下错误消息:“已达到内存使用率限制”。
与迭代器类似,流将XML响应分段到特定窗口。区别是响应,它删除GetNext操作和迭代器ID。XML发送流数据包,当数据流结束时,客户端生成响应。
进一步的问题描述
对于需要自动化的使用案例,请使用工具pyIOSXR。此自动化工具是XML代理,它有助于发出一些show命令,并且总体上会连接到设备。
每次您通过此代理发送大请求时,都会显示错误:
注意:只有注册的思科用户才能访问内部思科工具和信息。
RESPONSE ERROR: 0xa367a600 'XML Service Library' detected the 'fatal' condition 'The throttle on the memory usage has been reached. Please optimize the request to query smaller data.'
通过显示“优化查询较小数据的请求”的错误消息,您可以使用迭代器配置代理XML API。这在理论上允许对响应进行分段。
配置迭代器时,会显示相同的错误消息:“响应错误……请优化查询较小数据的请求”。
当显示错误时,下一步是了解该功能(在本例中是迭代器)为什么不能用于查询。
pyIOSXR建议在设备中正确启用XML代理,这意味着API不允许使用迭代器。
下一步是测试第二个选项:流传输。
注意:pyIOSXR不允许我们使用除具有下列元素的基本XML查询以外的其他报头:
.
.
.
流和迭代器会在查询中添加报头。流会添加有助于系统构建完整响应的流ID。迭代器添加GET_Next和迭代器ID。
测试流还显示与迭代器相同的错误消息。
解决方案
在“对设备进行查询的更多建议”一节中,有更多工具可以对这些问题进行分类。通配符就是其中之一。通配符是内存限制的解决方案。
通配符可创建特定查询,以避免请求不必要的信息。例如,对于BGP信息,请使用show route bgp命令而不是通用show route命令。此示例适用于XML查询和逻辑。向系统请求批量信息可能会产生内存和处理问题。
打开案例时,使用的是以下查询:
DEFAULT
VRF_NAME
NAME
>
此查询以完整的BGP表为目标。对于此非特定请求,响应接近2.2 Gb,因此已达到内存限制限制。
要解决此问题,需要特定查询,这样系统就可以处理查询并返回信息。
Cisco IOS XR中的XML
XML定义了数据的显示和结构化方式。这是解析计算机理解为位并显示结构化、标准化信息的一种方法。
XML的结构如下:
This is an example
所有标签都包含两部分,即开始标签(<init>)和结束标签(</init>)。 如果未使用此结构,则XML无法理解标签的结束位置。
XML由两个实体组成:
此结构化数据的一个类比是将XML数据作为一个树进行比较。容器是一根树枝,每根树枝上有树枝。枝叶不包含除信息以外的任何信息。
例如,下一棵树的根部呈灰色,容器呈白色,枝叶呈蓝色。

使用XML API
要测试/使用XML API,您需要的第一件事是查询。
1.查询具有标题:
2.您需要为请求添加标记。在请求中,您需要指定版本。
3.通过报头、请求和版本,正文继续执行API具有以下内容的任何XML操作:
…
注意:请注意,每个查询中的请求包含不同的操作。无需对每个操作执行请求。
下一个示例显示包含所有必需信息的请求:
…
XML API支持的操作
Cisco IOS XR支持5个操作,允许用户与XML架构具有的信息进行交互:
1.本地数据操作:
- <Get></Get>:收集措施数据项(枝叶具有的数据)。
- <Set></Set>:配置、更改或添加数据项。
- <Delete></Delete>:消除一个或多个数据项。
- <GetVersionInfo></GetVersionInfo>:检索所请求组件的主要和次要版本号的操作。
- <GetDataSpaceInfo></GetDataSpaceInfo>:此操作标签显示映射到容器的枝叶名称。
2. CLI操作:
- <CLI><CLI/>:允许我们以CLI命令形式发出配置请求的标记。
- <GetNext><GetNext/>:如果数据大于块大小,此标记会添加到下一个分段回复。
提供的XML架构服务
XML API实现以下命名空间:
注意:如果需要查看根对象,请访问Cisco IOS-XR XML网络管理。
警告:请注意,每个命名空间分别管理不同的数据和操作。
- 配置:允许执行“获取”、“设置”和“删除”操作的操作。
- 操作:例如CLI show命令。
- 操作:支持“设置”操作。通过此操作,您可以访问操作数据,例如clear命令和其他类似命令。
- 管理操作:访问管理员操作数据。
- 管理员操作:访问管理操作数据。
- 管理员配置:访问管理配置数据。
创建查询
有两种不同的出行方式。为查询选择命名空间后,需要使用模式进行操作:
1. XML架构文档
这些选项提供显示容器和枝叶的完整XML树。对于文档,请单击CRS XML方案。
系统随即会显示文档页面。

此页显示对象、容器和子项。每个对象都包含一个子对象。如果子对象不包含任何其他容器,则将其视为枝叶。
您可以单击子项,并显示用于生成查询的信息。例如IPv4:

在上一个映像中,对于任何IPv4查询,可以运行针对容器IP的Configuration操作,在容器Cinetd中,在容器Services中,最后在枝叶IPv4中。
下一个查询是:
2. XML API
XML API嵌入在Cisco IOS XRl中。要查看XML树,请使用show xml schema命令。通过发出命令,整个XML架构在类似于Linux的CLI中可见。
在此CLI中有以下操作:
?:就像 — 帮助
LS:列出分支用户所在的容器/枝叶。
<operation>:通过发出?您可以检查操作并发出命令:
一些操作包括:
-config
- adminconfig
- cd
— 列表
— 操作员
-操作
CD:更改目录/容器。
示例显示了以下内容:
RP/0/RP0/CPU0:XR#show xml schema
Username:admin
Password:
xml-schema[config]:> ?
config oper action
adminconfig adminoper adminaction
cd pwd classinfo
list ls datalist
walk walkdata get
hierarchy quit exit
help
xml-schema[config]:> ls
[container] RIP
[container] TCL
[container] LawfulIntercept
[container] ErrorDisable
[container] PerfMgmt
[container] RCC
[container] FrequencySynchronization
[container] HwModuleProfileConfig
[container] MPLSStatic
[container] XML
[container] Tpa
[container] MLD
[leaf] RPIsolationEnabled
[leaf] RPIsolationMultiple
[container] AMT
[container] PriorityFlowControlWatchdog
[container] SSH
[container] BNG_PBR
警告:请注意,登录设备需要凭证。这些凭证是设备的本地凭证,并且需要root-ls/admin配置文件。
下一个示例展示如何使用XML API构建查询。例如,查询必须检查XML代理是否已启用:
xml-schema[config]:> ls
[container] RIP
[container] TCL
[container] LawfulIntercept
[container] ErrorDisable
[container] PerfMgmt
[container] RCC
[container] FrequencySynchronization
[container] HwModuleProfileConfig
[container] MPLSStatic
[container] XML >>> Here
[container] Tpa
[container] MLD
[leaf] RPIsolationEnabled
[leaf] RPIsolationMultiple
[container] AMT
[container] PriorityFlowControlWatchdog
[container] SSH
[container] BNG_PBR
[container] L2TP
[container] Exception
[container] IP_RAW
[container] MSTAG
[container] FpdXRConfig
xml-schema[config]:> cd XML
xml-schema[config]:XML> ls
[container] Agent
xml-schema[config]:XML> cd Agent
xml-schema[config]:XML.Agent> ls
[container] Default
[container] SSL
[container] TTY
xml-schema[config]:XML.Agent> cd TTY
xml-schema[config]:XML.Agent.TTY> ls
[leaf] Enable >>> Leaf of interest.
[leaf] IterationSize
[leaf] StreamingSize
[container] Throttle
[container] Session
注意下一个提示:
xml-schema[config]:XML.Agent.TTY>
上一个提示符显示XML树。使用此信息时,查询为:
测试XML查询
一旦建立了查询,下一步就是对其进行测试。要对其进行测试,可以在CLI中发出xml echo format命令。可以在同一设备中存档此操作。
提示:请注意,输入上一个命令后,用户可以复制/粘贴查询并按Enter键。设备显示对查询的响应。
RP/0/RP0/CPU0:XR#xml echo format
XML>
XML>
>>> Hit enter here. Immediately getting the reply.
! Reply:
true >>> This is the requested value.
XML> exit
路由器显示响应和ResultSummary。
注意:此XML响应不显示,也不要求配置任何限制内存。由于未使用任何SSH/TTY,因此无论大小如何,都需要响应。一个是XML客户端,另一个是嵌入式XML echo命令,行为可以改变。
思科IOS XR中的XML深入探讨
Cisco IOS XR是一个模块化系统,需要不同的软件包才能运行。XML被视为位于管理平面子系统中。
启动XR时,在设备中利用XML有两种不同的方法:
- CORBA代理(使用SSL)。
- SSH代理。
CORBA作为传统协议使用SSL,可在安全包中找到。另一方面,SSH方法需要使用Manageability Package。
基础设施以以下方式分布:

从上一个映像中可以看到,路由器和交换机处理器(RSP)中存在XML的主要过程。 这些进程有一个通用API,用于监控设备中的其他进程的所有信息,这些其他进程包括:
- 从线卡:
- 从路由器处理器:
- 统计信息管理器。
- SysDB。
- TCP(对于XML API,使用TCP 38751)
- NetIO
注意:要查看有关此问题的更多信息,请检查Cisco IOS XR中的XML错误部分。
根据请求,会触发一个或多个进程。开发自动化工具时,如果响应大于块大小,则响应无法成功。如果某个进程需要很长时间进行回复,则它可能会生成EDM日志、关闭或影响服务。
与客户端的API交互
下图显示了交互:

要在设备上配置/启用XML代理,请使用:
RP/0/RP0/CPU0:XR#config
RP/0/RP0/CPU0:XR(config)#xml agent tty
RP/0/RP0/CPU0:XR(config-xml-tty)#commit
系统需要在以下方面与客户达成一致:
- 版本
- 方案
版本可在以下两个区域中定义:
以下哪项适用于特定组件:
注意:请记住,可以通过将GetVersionInfo操作应用于容器来检查架构版本。
- 次要版本更新:任何对XML架构的添加,如添加新数据项。
- 主要版本更新:语义更改、模式或组件的删除等。
您可以检查版本。下一个示例展示如何执行此操作:
使用xml echo formal命令,然后将标记GetVersionInfo添加到查询中,以查找正在路由器上运行的版本。如下图所示:
RP/0/RSP0/CPU0:XR#xml echo format
Mon Jul 31 13:53:50.993 UTC
XML>
>>> This is the request
XML>
注意:请求显示主要组件中所有正在运行的版本,并在组件中的容器中显示版本。
Cisco IOS XR中的XML错误
如果路径正确,则每个XML API请求都会显示请求的信息。
查询错误时
路由器显示三种不同的消息:
每次GET操作具有空响应时,都会显示此消息。
GET操作在XML架构中不包含此操作。
请求的元素找不到元素级别。
错误类型
1.传输:此类别中的错误包括XML代理/客户端通信之间的任何错误。这意味着传输中可能会发生任何SSH交互或问题。因此,为了检查这类问题,建议检查SSH踪迹,以检查任何有关身份验证、端口等的问题。
2. XML解析器:格式和语法的任何问题,发送的响应或查询中的问题。当发生错误时,这些问题通常会发送失败的原因。
例如:
ERROR: 0xa367a600 'XML Service Library' detected the 'fatal' condition 'The throttle on the memory usage has been reached.
3. XML架构:与路由器模式不同的任何模式。要解决这些问题,请检查CLI方案和版本。
例如:
ErrorCode="0x43688400" ErrorMsg="'XMLMDA' detected the 'warning' condition 'An XML request contains an element which is unrecognised or incorrectly positioned&apos
4.工序处理:配置设备时,可能会出现这些问题。要解决此问题,您需要对进程(例如commit、sysdb等)进行故障排除。
注意:错误信息将添加到操作元素级别中。它以ErrorCode(32位int)和Errormsg属性的形式编码。
更多建议
其他有用技术:
1.通配符:这也称为特定查询。
2.批处理:将多种技术或操作合并到一个请求中(尽力而为操作)。
3.自定义过滤:如果架构允许,可帮助选择表中的行。