目录

简介

先决条件

要求

使用的组件

限制内存问题

进一步的问题描述

解决方案

Cisco IOS XR中的XML

使用XML API

XML API支持的操作

提供的XML架构服务

创建查询

测试XML查询

思科IOS XR中的XML深入探讨

与客户端的API交互

Cisco IOS XR中的XML错误

查询错误时

错误类型

更多建议

简介

本文档介绍在服务请求和思科工具中看到的XML内存限制问题。

先决条件

要求

Cisco 建议您了解以下主题：

- Cisco IOS® XR平台

- XML（可扩展标记语言）基础设施

- 公共对象请求代理体系结构(CORBA)

- 元件管理系统(EMS)

- 外部数据管理器(EDM)

使用的组件

本文档中的信息基于ASR9000。

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

限制内存问题

立案时提出了以下问题：

1. 路由器上可配置的最大内存是多少？

2. 是否有办法中断大量XML回复？

回答：

1. 最大内存更改取决于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)

注意：任一版本的默认值为300 MB

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编程指南”：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有两种不同的方法：

1. CORBA代理（使用SSL）。

2. SSH代理。

注意：CORBA在3.7版之后已弃用。

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

系统需要在以下方面与客户达成一致：

1. 版本

2. 方案

版本可在以下两个区域中定义：

- 请求标记：

- 主要组件标签：

以下哪项适用于特定组件：

注意：请记住，可以通过将GetVersionInfo操作应用于容器来检查架构版本。

- 次要版本更新：任何对XML架构的添加，如添加新数据项。

- 主要版本更新：语义更改、模式或组件的删除等。

您可以检查版本。下一个示例展示如何执行此操作：

注意：XML操作包括GET、SET等。

使用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请求都会显示请求的信息。

查询错误时

路由器显示三种不同的消息：

- ItemNotFound

每次GET操作具有空响应时，都会显示此消息。

- ItemNotFoundBelow

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.自定义过滤：如果架构允许，可帮助选择表中的行。