本產品的文件集力求使用無偏見用語。針對本文件集的目的,無偏見係定義為未根據年齡、身心障礙、性別、種族身分、民族身分、性別傾向、社會經濟地位及交織性表示歧視的用語。由於本產品軟體使用者介面中硬式編碼的語言、根據 RFP 文件使用的語言,或引用第三方產品的語言,因此本文件中可能會出現例外狀況。深入瞭解思科如何使用包容性用語。
思科已使用電腦和人工技術翻譯本文件,讓全世界的使用者能夠以自己的語言理解支援內容。請注意,即使是最佳機器翻譯,也不如專業譯者翻譯的內容準確。Cisco Systems, Inc. 對這些翻譯的準確度概不負責,並建議一律查看原始英文文件(提供連結)。
本文檔介紹在服務請求和思科工具中看到的XML記憶體限制問題。
思科建議您瞭解以下主題:
本文檔中的資訊基於ASR9000。
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。如果您的網路運作中,請確保您瞭解任何指令可能造成的影響。
案件立案時提出以下問題:
答案:
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.
<snip>
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程式使用的記憶體。如果進程超過記憶體,它會回覆錯誤消息:「The throttle on the memory usage has been reached」。
與「迭代器」類似,「串流」會將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。理論上,這允許將反應進行分段。
設定迭代器時,會顯示相同的錯誤訊息:「RESPONSE ERROR...請最佳化要求以查詢較小的資料」。
當顯示錯誤時,下一步是瞭解為何該功能(本例中為Iterators)不適用於查詢。
pyIOSXR建議您在裝置中正確啟用XML代理,這意味著API不允許使用迭代器。
下一步是測試第二個選項:串流。
注意: pyIOSXR不允許我們處理除具有下列元素的基本XML查詢以外的其他標頭:
<?xml version="1.0" encoding="UTF-8"?>
<Request MajorVersion="1" MinorVersion="0">
<Operation>
.
.
.
</Operation>
</Request>
串流和迭代器會在查詢中新增標頭。串流會加入串流ID,以協助系統建立完整的回應。迭代器增加GET_Next和迭代器ID。
測試串流時也顯示與迭代器相同的錯誤訊息。
在More Recommendation to do Queries to the Device一節中,有更多工具可以解決這些問題。萬用字元就是其中之一。萬用字元是記憶體限制的解決方案。
萬用字元會建立特定的查詢,以避免要求不必要的資訊。例如,有關BGP的資訊,請使用show route bgp命令,而不使用通用show route 命令。此範例適用於XML查詢和邏輯。向系統請求批次資訊可能會產生記憶體和處理問題。
打開案例時,使用此查詢:
<?xml version="1.0" encoding="UTF-8"?>
<Request MajorVersion="1" MinorVersion="0">
<Get>
<Operational>
<BGP MajorVersion="36" MinorVersion="1">
<InstanceTable>
<Instance>
<Naming>
<InstanceName>
DEFAULT
</InstanceName>
</Naming>
<InstanceActive>
<VRFTable>
<VRF>
<Naming>
<VRFName>
VRF_NAME
</VRFName>
</Naming>
<AFTable>
<AF>
<Naming>
<AFName>
NAME
</AFName>
</Naming>
<NetworkTable>
</NetworkTable>
</AF>
</AFTable>
</VRF>
</VRFTable>
</InstanceActive>
</Instance>
</InstanceTable>
</BGP>>
</Operational>
</Get>
</Request>
此查詢以完整的BGP表為目標。對於此非特定請求,響應幾乎為2.2 Gb,因此已達到記憶體限制限制。
要修復它,需要特定查詢,這樣系統才能處理查詢並返回資訊。
注意:如需進一步資訊、規格或其他命令,請按一下下一個連結「XML程式設計手冊:XR XML程式設計手冊」
XML定義如何顯示和建構資料。這是一種分析電腦理解為位並顯示結構化、標準化資訊的方式。
XML具有下列結構:
<init>
<body>
<message>This is an example</message>
</body>
</init>
所有標籤都有兩部分,即開始標籤(<init>)和結束標籤(</init>)。如果未使用此結構,XML將無法瞭解標籤結束的位置。
XML由兩個實體構成:
此結構化資料的一個類比是將XML資料作為樹進行比較。容器是一個分支,每個分支都有樹葉。除資訊外,枝葉不包含任何其他資訊。
例如,下一棵樹的根呈灰色,容器呈白色,枝葉呈藍色。
若要測試/使用XML API,您首先需要的是查詢。
1. 查詢具有標頭:
<?xml version="1.0" encoding="UTF-8”?>
附註:這是唯一不需要結尾標籤的標籤。
2. 您需要為請求增加標籤。在請求中,您需要指定版本。
<Request MajorVersion="1" MinorVersion="0">
3. 使用表頭、請求及版本,主體會繼續API具有的任何下列XML作業:
<Operation>
<Operation_1>
<Operation_2>
…
<Operation_n>
附註:請注意,請求會在每個查詢中包含不同的作業。不必針對每項作業執行要求。
下一個示例顯示一個請求,其中包含所有必需的資訊:
<?xml version="1.0" encoding="UTF-8”?>
<Request MajorVersion="1" MinorVersion="0">
<Operation></Operation>
<Operation_1></Operation_1>
<Operation_2></Operation_2>
…
<Operation_n></Operation_n>
</Request>
Cisco IOS XR支援5個操作,允許使用者與XML架構具有的資訊進行互動:
1. 原生資料作業:
2. CLI操作:
XML API實作下列名稱空間:
注意:如果需要檢視根對象,請訪問:Cisco IOS-XR XML網路管理。
注意:請注意,每個名稱空間會監督不同的資料和作業。
有兩條不同的旅行路線。選取查詢的名稱空間之後,您需要使用綱要來處理:
1. XML Schema檔案
這些選項提供顯示容器和枝葉的完整XML樹。對於文檔,請按一下CRS XML Schema。
此時將顯示文檔頁面。
此頁面顯示物件、容器和子件。每個物件都包含一個子物件。如果子物件不包含任何其他容器,則會將其視為分葉。
您可以按一下子項,並顯示用來建立查詢的資訊。例如IPv4:
在上一張圖中,對於任何IPv4查詢,都可以運行針對容器IP、容器Cinetd、容器Services中的配置操作,最後在枝葉IPv4中運行。
附註:任何需要成為分葉才能執行查詢的作業。
查詢是下一個:
<?xml version="1.0" encoding="UTF-8"?>
<Request MajorVersion="1" MinorVersion="0">
<Get>
<Configurations>
<IP>
<Cinetd>
<Services>
<IPv4/>
</Services>
</Cinetd>
</IP>
</Configurations>
</Get>
</Request>
2. XML API
XML API嵌入在思科IOS XRl中。若要檢視XML樹,請使用show xml schema命令。透過發出命令,可以在類似於Linux的CLI中看到整個XML架構。
在此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
<snip>
警告:請注意,登入裝置需要憑據。這些憑證是裝置的本地憑證,需要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 version="1.0" encoding="UTF-8"?>
<Request MajorVersion="1" MinorVersion="0">
<Get>
<Configuration>
<XML>
<Agent>
<TTY></TTY>
</Agent>
</XML>
</Configuration>
</Get>
</Request>
建立查詢後,下一步就是測試查詢。要測試它,可以在CLI中發出xml echo format命令。此動作可查扣於相同裝置中。
提示:請注意,輸入上述命令後,使用者可以複製/貼上查詢並按Enter鍵。裝置顯示對查詢的響應。
RP/0/RP0/CPU0:XR#xml echo format
XML>
XML> <?xml version="1.0" encoding="UTF-8"?>
<Request MajorVersion="1" MinorVersion="0">
<Get>
<Configuration>
<XML>
<Agent>
<TTY></TTY>
</Agent>
</XML>
</Configuration>
</Get>
</Request> >>> Hit enter here. Immediately getting the reply.
! Reply:
<?xml version="1.0" encoding="UTF-8"?>
<Response MajorVersion="1" MinorVersion="0">
<Get>
<Configuration>
<XML MajorVersion="1" MinorVersion="4">
<Agent>
<TTY>
<Enable>
true >>> This is the requested value.
</Enable>
</TTY>
</Agent>
</XML>
</Configuration>
</Get>
<ResultSummary ErrorCount="0"/>
</Response>
XML> exit
路由器顯示響應和ResultSummary。
注意:此XML響應不顯示,也不要求配置任何限制記憶體。由於未使用任何SSH/TTY,因此無論其大小如何,都需要響應。一個是XML客戶端,另一個是嵌入式XML echo命令,行為可能會改變。
Cisco IOS XR是需要不同軟體套件才能工作的模組化系統。XML被視為位於管理平面子系統中。
當XR啟動時,有兩種方法可以在裝置中利用XML:
注意:CORBA在3.7版之後已被取代。
CORBA作為傳統協定使用SSL,可在安全包中找到。另一方面,SSH方法需要使用Manageability Package。
基礎設施以下列方式分佈:
從上一張圖中,可以看到路由器和交換機處理器(RSP)中的XML主進程。這些進程有一個通用API,用於監視來自裝置中其它進程的所有資訊,這些進程包括:
注意:要檢視有關此過程的詳細資訊,請檢查Cisco IOS XR中的「XML錯誤」部分。
視請求而定,會觸發一或多個處理。開發自動化工具時,如果響應大於塊大小,則響應無法成功。如果回覆過程需要很長時間,則可能生成EDM日誌、關閉或影響服務。
下一張圖顯示互動:
要在裝置上配置/啟用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個區域中:
<Request Major Version=“1” MinorVersion=“0”>
哪一項適用於特定元件:
<BGP MajorVersion=“1” MinorVersion=“0”>
注意:請記住,您可以檢查套用至容器的GetVersionInfo作業之綱要版本。
您可以檢查版本。下一個範例顯示如何執行:
附註:XML作業包括GET、SET等。
<?xml version=”1.0” encoding=“UTF-8”?>
<Request Major Version=“1” MinorVersion=“0”>
<GetVersionInfo>
<Operation/>
</GetVersionInfo>
</Request>
使用xml echo formal命令,然後將標籤GetVersionInfo增加到查詢中,以查詢路由器上運行的版本。如下所示:
RP/0/RSP0/CPU0:XR#xml echo format
Mon Jul 31 13:53:50.993 UTC
XML> <?xml version="1.0" encoding="UTF-8"?>
<Request MajorVersion="1" MinorVersion="0">
<GetVersionInfo>
<Configuration>
<XML>
<Agent>
</Agent>
</XML>
</Configuration>
</GetVersionInfo>
</Request> >>> This is the request
<?xml version="1.0" encoding="UTF-8"?>
<Response MajorVersion="1" MinorVersion="0">
<GetVersionInfo>
<Configuration>
<XML MajorVersion="1" MinorVersion="4">
<Agent>
<Default>
<VRFTable>
<VRF>
<ApplyGroup MajorVersion="2" MinorVersion="3"/>
<ExcludeGroup MajorVersion="2" MinorVersion="3"/>
<ApplyGroupAppend MajorVersion="2" MinorVersion="3"/>
<ApplyGroupRemove MajorVersion="2" MinorVersion="3"/>
</VRF>
</VRFTable>
</Default>
<SSL>
<VRFTable>
<VRF>
<ApplyGroup MajorVersion="2" MinorVersion="3"/>
<ExcludeGroup MajorVersion="2" MinorVersion="3"/>
<ApplyGroupAppend MajorVersion="2" MinorVersion="3"/>
<ApplyGroupRemove MajorVersion="2" MinorVersion="3"/>
</VRF>
</VRFTable>
</SSL>
</Agent>
</XML>
</Configuration>
</GetVersionInfo>
<ResultSummary ErrorCount="0"/>
</Response>
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. 自訂篩選:如果綱要允許,可協助選取表格中的資料列。
修訂 | 發佈日期 | 意見 |
---|---|---|
1.0 |
16-Feb-2024 |
初始版本 |