簡介
本文描述收集記憶體洩漏問題的其他資訊的一般故障排除提示。
必要條件
需求
思科建議您瞭解以下主題的基本知識:
- 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 platform software status control-processor brief
顯示已排序的進程記憶體
顯示記憶體統計資訊
顯示記憶體分配進程總計
show process memory platform sorted
show logging
核心檔案/系統報告
附加show tech是受歡迎的,它對TAC很有幫助,您可以從TAC開發的幫助更快找到問題的自動化中獲益。
導致高記憶體利用率的條件始終與軟體相關。但是,並非所有記憶體使用率高的例項都是意外情況。必須考慮裝置上運行的可用的DRAM和功能組合。
使用Radkit時,對記憶體利用率高的問題進行故障排除會更順暢、更有效,並且有更好的TAC互動性。此工具由思科開發,可為TAC提供高度安全且簡便的方法來存取您在網路中選擇的裝置。有關詳細資訊,請訪問:Cisco RADKit
附註:確保運行的是受支援的版本。查詢該版本的銷售終止和生命週期終止文檔。如果需要,請移動到當前軟體維護版本下的版本。否則,TAC可能會受限於故障排除和解決方案選項。
有關記憶體故障排除的完整文檔,請參閱以下指南:
在ISR4K上:思科4000系列ISR的記憶體故障排除指南。
在ASR1K上:ASR 1000系列路由器記憶體故障排除指南。
瞭解高記憶體使用率
在Cisco IOS XE路由器中,DRAM是支援核心功能的最重要資源之一。DRAM用於儲存對於控制平面和資料平面操作至關重要的不同資料型別和處理/特徵資訊。
DRAM在IOS XE路由器中的主要用途包括:
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名稱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資訊部分中的指南,以瞭解初始分類時所需的資訊。
核心檔案
當記憶體利用率達到臨界水準時,作業系統可能會強制崩潰以便從此情況中恢復,從而生成包含核心檔案的系統報告。
core檔案是在特定時間點崩潰的特定進程的完整記憶體轉儲。此核心檔案對於TAC檢查記憶體和分析原始碼以瞭解進程意外過載/崩潰的情況和潛在原因至關重要。
core檔案可幫助TAC和開發人員查詢問題的根本原因、調試和修復問題。
附註:儘管TAC和開發人員努力尋找根本原因,但有時故障是網路事件或計時問題導致在實驗室中幾乎無法重現該故障。
有關意外重新載入以及如何檢索核心檔案的詳細資訊,請參閱使用TAC的Cisco IOS®平台中的意外重新載入故障排除。