목차

소개

사전 요구 사항

사용되는 구성 요소

배경 정보

Callsite란?

차등 통화 및 차등 바이트

메모리 소비 또는 누수 문제의 증상

문제 해결 시나리오

메모리 부족으로 인해 디바이스가 충돌했습니다.

디바이스가 아직 충돌하지 않았지만 메모리 사용 경고가 있습니다.

Callsite 식별

모듈, 데이터베이스 및 메시징의 프로세스 메모리 소비

Callsite 디버그

관련 문서 및 문서

소개

이 문서에서는 Cisco IOS® XE 기반 디바이스에서 라우터 및 스위치와 같은 누수 콜사이트의 메모리 문제를 해결하는 방법에 대해 설명합니다.

사전 요구 사항

Cisco IOS XE 소프트웨어 기반 장치의 메모리 관리에 대한 지식

사용되는 구성 요소

이 문서는 특정 소프트웨어 및 하드웨어 버전으로 한정되지 않습니다. 라우팅 및 스위칭 Cisco IOS XE 소프트웨어 기반 플랫폼에 적용됩니다.

이 문서의 정보는 특정 랩 환경의 디바이스를 토대로 작성되었습니다. 이 문서에 사용된 모든 디바이스는 초기화된(기본) 컨피그레이션으로 시작되었습니다. 현재 네트워크가 작동 중인 경우 모든 명령의 잠재적인 영향을 미리 숙지하시기 바랍니다.

배경 정보

델타 증가를 위해 디바이스의 프로덕션 메모리 사용을 모니터링하고 예상 여부를 확인하는 데 시간이 많이 걸립니다. 이 문서에서는 콜사이트의 정의 및 메모리 문제를 신속하게 해결하는 방법에 대해 설명합니다.

참고: 이 문서는 주로 라우팅 프로세서 DRAM(Dynamic Random-Access Memory) 메모리 사용량 문제 해결에 초점을 맞춥니다.

Callsite란?

Callsite는 Cisco TAC(Technical Assistance Center)에서 Cisco IOS-XE 관련 프로세스에서 메모리 할당을 수행하는 동안 어떤 소스 코드 기능이 호출되는지 확인하고 추적하는 데 사용하는 태그입니다.

고객은 더 신속한 해결을 위해 TAC 케이스를 열기 전에 이 태그를 제공할 수 있으며, 이 문서의 뒷부분에 나오는 명령을 통해 디버깅하는 데 도움을 받을 수도 있습니다.

차등 통화 및 차등 바이트

Diff 호출은 메모리 할당에 대한 호출 수와 deallocations 간의 차이를 모니터링합니다. 일반적으로 diff 통화의 양이 많으면 메모리 관련 문제가 발생할 수 있습니다. 이는 과도한 양의 div가 있을 때 발생합니다. 이는 시스템이 메모리를 해제하지 않고 할당이 누적되고 있음을 나타냅니다.

diff 호출과 diff 바이트는 모두 commandshow processes memory platform accounting으로 확인할 수 있습니다.

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

시스템에는 메모리 경고 및 위기 레벨 syslog를 트리거하는 내부 메모리 사용량 임계값이 있습니다. 이러한 임계값을 기반으로 한 메모리 사용의 백분율은 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 케이스를 제출하여 diff 호출 또는 diff 바이트가 특정 프로세스에 관한 것인지 확인합니다. 일반적으로 명령 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).

이러한 유형의 경보는 트러블슈팅의 시작점으로 중요한 정보를 강조 표시합니다.

- 수신한 경보의 날짜 및 시간

- 사용률

- 영향을 받는 구성 요소

- 상위 Cisco IOS XE는 diff 호출을 기준으로 해당 시스템이 상위 소비자로 탐지한 프로세스를 처리합니다.

참고: %PLATFORM-4-ELEMENT_WARNING 경보는 메모리 소비 문제의 RCA(근본 원인 분석)를 얻기 위한 결정적인 데이터 요소가 아닙니다.

참고: TMPFS(Temporal File System), QFP(Quantum Flow Processor) 및 Cisco IOS 데몬(IOSd)과 같은 서로 다른 구성 요소와 관련된 다른 유형의 증상 및 메모리 사용량 경보는 있지만 이 문서의 범위에 포함되지 않습니다.

참고: 이 문서에서는 Cisco IOS 데몬(IOSd)에서 메모리 문제를 나타내는 SYS-2-MALLOCFAIL syslog 메시지의 트러블슈팅을 다루지 않습니다.

문제 해결 시나리오

메모리 부족으로 인해 디바이스가 충돌했습니다.

메모리 리소스가 부족하여 디바이스가 충돌하는 경우 syslog 메시지 %PLATFORM-4-ELEMENT_WARNING을(를) 확인하고 확인하려면 충돌 전에 마지막 로그를 확인해야 합니다. R0/0 smand: RP/0: 사용된 메모리 값 X%가 경고 수준 Y%를 초과합니다.

참고: 메모리 부족으로 인해 충돌이 발생한 후 로컬 DRAM 버퍼의 syslog가 지워지므로, 충돌 이벤트가 발생하기 전에 syslog 서버의 아카이브 로그를 확인해야 합니다. syslog 서버가 아직 설정되지 않은 경우 How to configure logging in Cisco IOS를 참조하십시오.

참고: %PLATFORM-4-ELEMENT_WARNING: R0/0 smand: RP/0: Used Memory(사용된 메모리) 값 X%가 경고 수준 Y% 경보를 초과합니다. 충돌 이벤트가 디코딩된 Cisco IOS tracelogs에서도 나타날 수 있습니다. 자세한 내용은 Unified Logging Enhancement를 사용하여 추적 로그 수집 및 관리를 참조하십시오.

메모리가 부족하여 시스템에 충돌이 발생했습니다. 결과적으로 시스템 보고서가 생성됩니다. 이 보고서는 메모리 문제를 조사하는 데 사용할 수 있는 관련 데이터가 포함된 .tar.gz 파일입니다. 자세한 내용은 시스템 보고서를 사용하여 문제 해결을 참조하십시오.

압축을 풀면 시스템 보고서에 maroon stats라는 디렉토리가 tmp 디렉토리에 포함되어 있습니다. Maroon 통계는 서로 다른 Cisco IOS XE 프로세스에 대한 diff 통화 및 바이트에서 메모리 할당 및 거래 위치를 추적하는 코드로 구현된 서비스 기능 기능입니다.

시스템 보고서 내에 포함된 마룬 통계 스냅샷은 잠재적 범인 콜사이트를 식별하여 메모리 소비 또는 누출 문제 RCA를 확인하거나 더 디버깅하고 더 잘 이해할 수 있도록 합니다.

참고: 시스템 보고서에서 마룬 통계 디렉토리를 디코딩하는 것은 TAC 엔지니어가 어떤 코드 기능이 메모리를 할당하는지 파악하는 데 도움이 되는 내부 및 기밀 코드 기능을 포함하기 때문에 TAC에서만 수행할 수 있습니다. TAC 케이스를 접수하고 시스템 보고서를 제공하십시오.

참고: 시스템 보고서는 메모리 부족으로 인한 메모리 충돌을 이해하기 위해 충분한 양의 데이터를 제공하지만, 경우에 따라 추가 메모리 추적, 모니터링, 디버그 및 문제 해결이 필요합니다.

디바이스가 아직 충돌하지 않았지만 메모리 사용 경고가 있습니다.

이 명령은 플랫폼 리소스를 표시하고 경고 및 한계 메모리 사용량 임계값을 표시합니다.

참고: 메모리 소비 또는 누수가 발생할 수 있는 속도에 따라, 메모리 리소스가 부족하여 디바이스가 충돌할 위험이 있으므로, 메모리 관련 출력 명령을 수집하여 더 디버깅하는 것이 좋습니다.

참고: 메모리 사용 경고가 표시되면 TAC 케이스를 제출하고 show tech-support 명령을 제공할 수 있습니다.

TAC 엔지니어가 초기에 문제를 분류하고 RCA를 신속하게 찾을 수 있도록 도와주는 기술 지원 메모리를 보여 줍니다.

디바이스가 아직 crash하지 않았고 로컬 syslog 버퍼에 메모리 경보를 생성하거나 모니터링 툴을 통해 syslog 서버에서 수신하는 경우, 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(Resident Set Size) 열을 확인합니다. 각 Cisco IOS XE 프로세스에서 사용하는 킬로바이트 수를 나타냅니다.

Callsite 식별

그런 다음 show processes memory platform accounting의 출력을 수집합니다. 이는 서로 다른 프로세스의 diff 통화 및 바이트 값을 보여 줍니다. 보통 우리는 더 큰 가치에 초점을 맞춥니다.

diff call bytes는 시스템에서 다시 릴리스되지 않고 프로세스에 의해 시스템에 남아 있는 메모리 바이트 수를 표시하므로 잠재적인 메모리 누수가 있는지 여부를 확인하는 데 좋은 지표입니다.

이 데이터를 기반으로 diff 통화 및 바이트 값이 더 큰 문제의 프로세스에서 callsite 태그가 무엇인지 식별할 수 있습니다.

show process memory platform accounting은 이러한 차등 통화와 바이트를 시간에 따라 추적합니다. 이 명령 출력의 맨 아래에 백트레이스가 포함되는 경우도 있습니다. 이는 내부 툴을 사용하여 백트레이스를 디코딩하므로 TAC 엔지니어에게 중요하며, 어떤 코드 기능이 잠재적 메모리 누수를 일으킬 수 있는지 확인하는 데 도움이 됩니다.

참고: show process memory platform accounting 명령이 메모리 누수 문제를 해결하는 데 필요한 정보를 충분히 제공하지 않는 경우 프로세스에 대한 추가 디버깅이 필요한 경우가 많습니다.

또한 호출 사이트를 식별하기 위한 보조 메서드에 대해서는 이 문서의 호출 사이트 디버그를 참조하십시오.

모듈, 데이터베이스 및 메시징의 프로세스 메모리 소비

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 디버그

호출 사이트를 식별하는 보조 메서드는 호출 사이트를 디버깅하는 것입니다. 다음 명령이 필요합니다.

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 명령은 해당 프로세스에 대한 callsites와 각 callsite에 대한 diff 호출 및 바이트를 보여 주는 테이블을 제공합니다. 예를 들어, 여기서는 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 plat soft memory <process> <location> alloc callsite bri는 diff call 또는 bytes 열이 증가할 때까지 시간이 지남에 따라 여러 번 실행되어야 합니다. 시스템이 메모리를 해제하지 않고 보유하고 있음을 나타내는 것입니다.

유출된 것으로 확인된 Callsite가 있으면 해당 Callsite에 대해 debug 플랫폼 소프트웨어 메모리 <process> <location> alloc backtrace start <callsite> depth 10 명령을 실행해야 합니다. 이 명령은 그대로 둘 수 있으며 서비스에 영향을 주지 않습니다.

식별된 callsite의 디버그를 활성화한 후 diff 호출/바이트가 증가할 때까지 show plat soft memory <process> <location> alloc callsite bri 명령을 다시 실행하면 해당 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 Series 라우터 메모리 문제 해결 가이드

- IOS-XE 메모리 사용량 검사

- EEM을 통한 메모리 사용률 문제 보고

- Cisco 4000 Series ISR용 메모리 트러블슈팅 가이드