簡介
本檔案介紹在服務請求和思科工具中看到的XML記憶體限制問題。
必要條件
需求
思科建議您瞭解以下主題:
- 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 Network Management。
注意:請注意,每個名稱空間分別管理不同的資料和操作。
- 組態:允許「獲取」(Get)、「設定」(Set)和「刪除」(Delete)操作的操作。
- 操作:例如CLI show命令。
- Action:支援Set操作。通過此操作,您可以訪問運算元據,例如clear命令和其他類似命令。
- 管理操作:訪問管理員運算元據。
- AdminAction:對管理運算元據的訪問。
- 管理員配置:對管理配置資料的訪問。
構建查詢
有兩種不同的旅行途徑。為查詢選擇名稱空間後,需要使用架構進行處理:
1. XML Schema文檔
這些選項提供顯示容器和葉的完整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>:通過發布?您可以檢查操作以及可以發出的命令:
某些操作包括:
-設定
- adminconfig
- cd
— 清單
- oper
-動作
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
警告:請注意,需要憑據才能登入到裝置。這些憑證是裝置的本地憑證,並且需要根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命令,行為可以改變。
Cisco 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
系統需要在這些方面與客戶端達成一致:
- 版本
- 方案
版本可以定義在2個區域:
適用於特定元件:
附註:請記住,可以通過將操作應用於容器的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.自定義篩選:如果架構允許,可幫助選擇表中的行。