目錄

簡介

必要條件

需求

採用元件

背景資訊

IOS XE路由器記憶體耗盡的症狀

TAC初始分類所需資訊

瞭解高記憶體使用率

EEM監控記憶體使用率

觸發程式

核心檔案

簡介

本文描述收集記憶體洩漏問題其他資訊的一般疑難排解秘訣。

必要條件

需求

思科建議您瞭解以下主題的基本知識：

- 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

注意：16.12版及更新版本提供日誌改進功能。

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上：Cisco 4000系列ISR的記憶體故障排除指南。

關於ASR1K：ASR 1000系列路由器記憶體故障排除指南。

瞭解高記憶體使用率

在Cisco IOS XE路由器中，DRAM是支援核心功能的最重要資源之一。DRAM用於儲存對於控制平面和資料平面操作至關重要的不同資料型別和處理/特徵資訊。

DRAM在IOS XE路由器中的主要用途包括：

IOSd記憶體（控制層面結構）：儲存與裝置控制層面相關的進程相關資訊，例如：路由資訊/協定、網路管理結構、系統配置和功能資訊。

QFP記憶體（資料平面結構）：儲存由微代碼處理的QFP操作的所有內容，例如儲存在QFP中的關鍵功能結構、微代碼指令和轉發指令。

暫存檔案系統(TMPFS)：TMPFS掛載在DRAM中，並由IOSd管理，可做為程式所需檔案的快速存取儲存區。如果這些檔案是永久性的，則會將其移至硬碟/bootflash。它透過減少臨時資料的讀/寫時間來增強系統效能。

在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初始分類所需資訊」部分中的指南。

核心檔案

當記憶體使用率達到臨界水準時，作業系統可能會強制發生崩潰以從此情況恢復，從而生成包含核心檔案的系統報告。

核心檔案是在特定時間點崩潰的特定進程的完整記憶體轉儲。此核心檔案對於TAC檢查記憶體和分析原始碼以瞭解進程意外重新載入/崩潰的情況和潛在原因至關重要。

核心檔案可協助TAC和開發人員找出問題的根本原因、偵錯並修正問題。

注意：即使TAC和開發人員設法找出根本原因，有時崩潰是網路事件造成的結果，有時也可能是時間問題，因此幾乎不可能在實驗中重現該問題。

有關意外重新載入以及如何檢索核心檔案的詳細資訊，請參閱在使用TAC的Cisco IOS®平台中排除意外重新載入故障。