目錄

簡介

必要條件

採用元件

背景資訊

什麼是Callsite?

差異呼叫和差異位元組

記憶體消耗或洩漏問題的症狀

疑難排解案例

裝置因記憶體不足而崩潰

裝置尚未崩潰，但出現記憶體使用警告

確定Callsite

模組、資料庫和消息傳遞中的進程記憶體消耗

調試Callsite

相關文章和文檔

簡介

本文檔介紹如何對基於Cisco IOS® XE的裝置（如路由器和交換機）中的記憶體問題進行故障排除，以便找到洩漏的callsite。

必要條件

基於Cisco IOS XE軟體的裝置中的記憶體管理知識。

採用元件

本文件所述內容不限於特定軟體和硬體版本。它適用於基於路由和交換Cisco IOS XE軟體的平台。

本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除（預設）的組態來啟動。如果您的網路運作中，請確保您瞭解任何指令可能造成的影響。

背景資訊

監控裝置的生產記憶體使用率以增量遞增並確認是否期望它是非常耗時的。本檔案將說明callsite是什麼，以及它如何幫助快速排除記憶體問題。

註：本文檔主要介紹路由處理器動態隨機訪問記憶體(DRAM)記憶體使用故障排除。

什麼是Callsite?

callsite是一個標籤，由Cisco技術援助中心(TAC)用於驗證和跟蹤在Cisco IOS-XE相關進程進行記憶體分配期間正在呼叫的原始碼功能。

客戶可以在開啟TAC案例之前提供此標籤，以便更快地解決問題，並且客戶還可以通過本文稍後部分介紹的命令幫助調試它。

差異呼叫和差異位元組

Diff呼叫監視記憶體分配呼叫數和deallocations呼叫數之間的差異。通常，大量的diff呼叫可能表示與記憶體相關的問題。當存在過多的差異時，即表明系統未釋放記憶體並且分配正在累積，會發生這種情況。

使用commandshow processes memory platform accounting命令可以看到both、diff呼叫和diff位元組：

test1#show processes memory platform accounting

Hourly Stats

process                   callsite_ID(bytes)          max_diff_bytes    callsite_ID(calls)   max_diff_calls  tracekey                                  timestamp(UTC)

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

sessmgrd_rp_0               F8E78C86E08C8003                 1579683      E6A19D3ED0064000            12269  1#90e06c15b54d23761b2b3b480e5fd704        2025-05-28 05:30

cli_agent_rp_0              A5E99693AA3B8004                 1268440      5D11C89CA87A8003             3197  1#3afb1165961ee7daf4af986e47f2f32c        2025-05-28 05:40

smand_rp_0                  3DFF8F3C424F400A                  918144      C34A609190E3C001              420  1#51a1581a8ac23e847e66fe8f268c66d1        2025-05-29 06:31

系統具有觸發記憶體警告和嚴重級別系統日誌的內部記憶體使用閾值。基於這些閾值的記憶體使用率百分比可使用命令show platform resources檢視。

test1#show platform resources

**State Acronym: H - Healthy, W - Warning, C - Critical

Resource                 Usage                 Max             Warning         Critical        State

----------------------------------------------------------------------------------------------------

RP0 (ok, active)                                                                               H

Control Processor       1.17%                 100%            80%             90%             H

DRAM                   2639MB(34%)           7753MB          88%             93%             H

bootflash              856MB(13%)            6338MB          88%             93%             H

harddisk               0MB(0%)               0MB             88%             93%             H

ESP0(ok, active)                                                                               H

QFP                                                                                           H

TCAM                   10cells(0%)           131072cells     65%             85%             H

DRAM                   89761KB(2%)           3670016KB       85%             95%             H

IRAM                   13525KB(10%)          131072KB        85%             95%             H

CPU Utilization        1.00%                 100%            90%             95%             H

Crypto Utilization     3.00%                 100%            90%             95%             H

Pkt Buf Mem (0)        67KB(0%)              524288KB        85%             95%             H

test1#

附註：提交TAC案例以確定差異呼叫或差異位元組是否與特定進程有關。通常，如果使用show processes memory platform sorted命令時可見的可用系統記憶體不足，則值得進一步檢查。

記憶體消耗或洩漏問題的症狀

當Cisco IOS XE端存在記憶體消耗或洩漏問題時，通常會生成警告或嚴重警報，例如：

Nov 22 11:37:16.770: %PLATFORM-4-ELEMENT_WARNING: R0/0: smand: RP/0: Used Memory value 89% exceeds warning level 88%. Top memory allocators are: Process: iomd_cc_0. Tracekey: 1#7eed26e49896115921b704a6d9780e72  Callsite ID: 4163698691 (diff_call: 395435). Process: iomd_cc_0. Tracekey: 1#7eed26e49896115921b704a6d9780e72  Callsite ID: 4163698691 (diff_call: 29). Process: btman_rp_0. Tracekey: 1#e7e4075661e7b1cbf867dc220f1b120c  Callsite ID: 407738370 (diff_call: 23).

此類警報突出顯示了作為故障排除起點的重要資訊：

- 收到警報的日期和時間

- 使用百分比

- 元件受到影響

- 根據差異呼叫，系統檢測到作為頂級使用者的Top Cisco IOS XE進程。

附註：%PLATFORM-4-ELEMENT_WARNING警報未必是獲取記憶體消耗問題的根本原因分析(RCA)的最終資料點。

附註：還有其它型別的症狀和記憶體使用警報與不同的元件相關聯，例如臨時檔案系統(TMPFS)、量子流處理器(QFP)和Cisco IOS守護程式(IOSd)，但是這些都不在本文檔的範圍之內。

附註：本文檔不介紹在Cisco IOS守護程式(IOSd)下指示記憶體問題的SYS-2-MALLOCFAIL系統日誌消息的故障排除。

疑難排解案例

裝置因記憶體不足而崩潰

當裝置因記憶體資源不足而崩潰時，必須在崩潰之前驗證最後日誌，以確認並檢視系統日誌消息%PLATFORM-4-ELEMENT_WARNING:R0/0:smand:RP/0:已用記憶體值X%超過警告級別Y%。

附註：請注意，由於記憶體不足，發生故障後，本地DRAM緩衝區中的系統日誌將被清除，因此需要在發生故障事件之前檢查系統日誌伺服器的歸檔日誌。如果尚未設定系統日誌伺服器，請參閱如何在Cisco IOS中配置日誌記錄。

附註：%PLATFORM-4-ELEMENT_WARNING:R0/0:smand:RP/0:崩潰事件後，已用記憶體值X%超過警告級別Y%警報。在解碼的Cisco IOS跟蹤日誌中也可以看到此事件。有關詳細資訊，請參閱使用統一日誌記錄增強功能收集和管理跟蹤日誌。

由於記憶體不足，系統發生崩潰。因此，將生成系統報告。此報告是一個.tar.gz檔案，包含可用來調查記憶體問題的相關資料。有關詳細資訊，請參閱使用系統報告進行故障排除。

解壓縮時，系統報告在tmp目錄中包含一個名為maroon stats的目錄。maroon stats是一種在代碼中實施的可維護性工具，用於跟蹤不同Cisco IOS XE進程的差異呼叫和位元組中的記憶體分配和解除位置。

系統報告中包含的maroon統計快照有助於識別潛在的責任人呼叫站點，以確定記憶體消耗或洩漏問題RCA或進一步調試它，並更好地理解它。

附註：從系統報告中解碼maroon stats目錄只能由TAC完成，因為它包含代碼的內部和機密功能，可幫助TAC工程師瞭解哪些代碼功能正在分配記憶體。請提交TAC案例並提供系統報告。

附註：請記住，系統報告提供大量資料，有助於瞭解記憶體不足導致的記憶體崩潰。但是，在某些情況下，還需要進行進一步的記憶體跟蹤、監控、調試和故障排除。

裝置尚未崩潰，但出現記憶體使用警告

命令show platform resources顯示警告和嚴重記憶體使用率閾值。

註：最佳實踐是收集與記憶體相關的輸出命令以進行進一步調試，因為根據記憶體消耗或洩漏發生的速度，裝置可能會因記憶體資源不足而崩潰。

附註：當出現記憶體使用警告時，您可以歸檔TAC案例並提供命令show tech-support和

show tech-support memory，協助TAC工程師初步診斷問題，並可能迅速找到RCA。

當裝置尚未崩潰並且正在本地系統日誌緩衝區中生成記憶體警報或通過監控工具從系統日誌伺服器接收到記憶體警報時，收集show processes memory platform的輸出，按順序排列以確定違規進程使用的位元組(如有)。

Router#show processes memory platform sorted

System memory: 4027884K total, 2580612K used, 1447272K free,

Lowest: 1447272K

Pid    Text      Data   Stack   Dynamic       RSS     Total              Name

--------------------------------------------------------------------------------

21240  263436    858000     136       308    858000   3632460   linux_iosd-imag

27232   12877    195460     136     23592    195460   2231316     fman_fp_image

26797      90    157260     136     22308    157260   1741996        cpp_cp_svr

19194    7325    102756     136      2376    102756   1318608           fman_rp

27179   18745    242708     136       448    242708   1160248    qfp-ucode-utah

在此輸出中，檢視駐留集大小(RSS)列。這是一個指示每個Cisco IOS XE進程消耗多少千位元組的指標。

確定Callsite

接下來，收集show processes memory platform accounting的輸出，該輸出顯示了不同進程的diff呼叫和位元組值。通常，我們關注的是更大的價值。

diff呼叫位元組是確定是否存在潛在記憶體洩漏的良好指示器，因為它顯示系統在不釋放回系統的情況下仍保留著多少位元組的記憶體。

根據此資料，您可以確定來自違規進程的callsite標籤哪個具有更大的diff呼叫和位元組值。

show process memory platform accounting跟蹤這些隨時間變化的差異呼叫和位元組。在某些情況下，此命令輸出的底部會包括回溯。這對TAC工程師非常重要，因為這樣的回溯是使用內部工具解碼的，並有助於確定哪些代碼功能可能會導致潛在的記憶體洩漏。

附註：如果命令show process memory platform accounting 不能提供足夠的資訊來排除記憶體洩漏問題，則經常需要針對進程進行進一步調試。

另請參閱從本文檔調試Callsite，以獲取用於標識Callsite的輔助方法。

模組、資料庫和消息傳遞中的進程記憶體消耗

要進一步調試Cisco IOS XE進程記憶體洩漏，可能需要為特定Cisco IOS XE進程收集這些命令：

# Allocations and frees per module

show platform software memory

show platform software memory

bri

# Database diff and entries statistics

show platform software memory database

| ex diff:0

show platform software memory database

bri | ex _0_

# Messaging diff and entries statistics

show platform software memory messaging

| ex diff:0

show platform software memory messaging

brief | ex _0_

這些命令輸出補充了對進程引起的記憶體洩漏的調查，並且如果初始基本分類命令不能提供足夠的資訊，則通常需要這些命令輸出。

調試Callsite

標識callsite的輔助方法是對其進行調試。需要以下命令：

debug platform software memory

alloc callsite start

show platform software memory

alloc callsite brief

debug platform software memory

alloc backtrace start

depth 10

show platform software memory

alloc backtrace

第一個命令允許調試進程的呼叫站點的分配。在較新版本中，此命令預設啟用，不會對服務產生影響。

show platform software memory <process> <location> alloc callsite brief 命令提供了一個表，該表顯示該進程的呼叫站點以及每個呼叫站點的比較呼叫和位元組。例如，此處我們顯示了Cisco IOS進程的輸出，但是它可以收集用於任何其他進程：

test1# show platform software memory ios r0 alloc callsite brief

The current tracekey is   : 1#b1ba773f123f8d990fd84c82c1d0e1d3

callsite            thread    diff_byte               diff_call

----------------------------------------------------------------

3DFF8F3C424F4004    4115      57384                   1

ABB2D8F932038000    4115      57360                   1

3869885745FC8000    4115      16960                   1

DF884D58A8EF0004    4115      8208                    1

DF884D58A8EF0008    4115      8208                    1

FAE69298A17B8000    4115      4243                    165

FAE69298A17B8001    4115      2640                    165

FAE69298A17B8002    4115      1958                    12

附註：show platt soft memory <process> <location> alloc callsite bri命令必須在一段時間內執行多次，直到找到diff call或bytes column increasing，因為這將指示系統在不釋放記憶體的情況下保留此類記憶體。

識別出正在洩漏的callsite後，必須為該callsite執行debug platform software memory <process> <location> alloc backtrace start <callsite> depth 10命令。此命令可以保留原位，不影響服務。

啟用已識別的callsite的調試後，仍需要再次執行show platt soft memory <process> <location> alloc callsite bri命令，直到看到diff呼叫/位元組增加，這樣可以跟蹤代碼為該callsite分配記憶體的功能。稍後，可以使用show platform software memory <process> <location> alloc backtrace來收集回溯，例如：

show platform software memory install-manager switch active R0 alloc back

backtrace: 1#83e58872a4792de086bf7191551098d7  maroon:7FCBACB87000+4642 maroon:7FCBACB87000+579C repm_core:7FCBB1F29000+1E146 avl:7FCBB4005000+2989 repm_core:7FCBB1F29000+1DAF6 repm_core:7FCBB1F29000+1BADF repm_core:7FCBB1F29000+37BA6 repm_core:7FCBB1F29000+2A341 tdldb_assist_no_dbdm:7FCBB5EDE000+416E

callsite: 7BD5593C00E30000, thread_id: 15556

allocs: 70, frees: 0, call_diff: 70

附註：將此輸出提供給TAC以解碼回溯，然後TAC工程師可驗證代碼中的行為、判斷是否存在現有缺陷或更好地瞭解行為。如果需要，TAC可以聯絡開發團隊。

註：確保軟體是最新的。若發現新軟體缺陷，TAC可與開發者團隊合作進一步偵錯和調查情況。

相關文章和文檔

- ASR 1000系列路由器記憶體故障排除指南

- 檢查IOS-XE記憶體使用情況

- 通過EEM報告記憶體使用問題

- Cisco 4000系列ISR記憶體故障排除指南