소개
이 문서에서는 메모리 누수 문제에 대한 추가 정보를 수집하기 위한 일반적인 트러블슈팅 팁을 설명합니다.
사전 요구 사항
요구 사항
Cisco에서는 다음 항목에 대한 기본 지식을 갖춘 것을 권장합니다.
- Cisco IOS® XE에 대한 기본 지식
- EEM(Embedded Event Manager)의 기본 지식
사용되는 구성 요소
이 문서는 특정 소프트웨어 및 하드웨어 버전으로 한정되지 않습니다. ASR1000, ISR4000, ISR1000, Cat8000 또는 Cat8000v와 같은 모든 라우팅 Cisco IOS XE 플랫폼에 적용됩니다.
이 문서의 정보는 특정 랩 환경의 디바이스를 토대로 작성되었습니다. 이 문서에 사용된 모든 디바이스는 초기화된(기본) 컨피그레이션으로 시작되었습니다. 현재 네트워크가 작동 중인 경우 모든 명령의 잠재적인 영향을 미리 숙지하시기 바랍니다.
배경 정보
이 문서에서는 메모리 사용률이 높을 경우 디바이스에서 생성하는 공통 로그를 찾을 수 있습니다.
또한 IOS XE 라우터의 메모리가 자주 부족해지는 상황을 TAC에서 모니터링하고 데이터를 얻는 데 도움이 되는 내장형 이벤트 관리자 기능을 어떻게 활용할 수 있는지 확인할 수 있습니다.
이 문서의 목적은 사용 가능한 경우 모든 트러블슈팅 절차를 폭넓게 설명하는 것이 아니라 보다 심층적인 트러블슈팅 가이드에 대한 참조만 제공됩니다.
IOS XE 라우터의 메모리 부족 현상
높은 메모리 사용량 문제를 처리할 때 일반적으로 경고 제한인 85%에 도달했음을 나타내는 로그 메시지가 표시됩니다. 이 값은 버전에 따라 다릅니다. 시스템에서 문제를 발견한 위치에 따라 다른 로그가 생성됩니다.
TCAM 문제:
CPP_FM-3-CPP_FM_TCAM_경고
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):
플랫폼 3- ELEMENT_TMPFS_WARNING
일반 시스템 로그(격리 필요):
플랫폼-4-요소_경고
PLATFORM-3-ELEMENT_CRITICAL
참고: 버전 16.12 이상에서 향상된 로그를 사용할 수 있습니다.
초기 분류에 필요한 TAC 정보
시계 표시
show version
플랫폼 리소스 표시
show platform software status control-processor 개요
정렬된 프로세스 메모리 표시
메모리 통계 표시
메모리 할당-프로세스 합계 표시
show process memory platform sorted
로깅 표시
- 메모리 부족 상태로 인해 예기치 않은 다시 로드가 발생한 경우:
코어 파일/시스템 보고서
TAC에는 show tech를 추가하는 것이 바람직하며, TAC에서 개발한 자동화를 통해 문제를 더 빨리 찾을 수 있습니다.
높은 메모리 사용률을 초래하는 조건은 항상 소프트웨어와 관련이 있습니다. 그러나, 높은 메모리 사용의 모든 인스턴스가 예기치 않은 것은 아닙니다. 사용 가능한 DRAM과 디바이스에서 실행되는 기능의 혼합을 고려하는 것이 중요합니다.
Radkit을 사용하는 경우 높은 메모리 사용률의 문제 해결이 더 원활하고 효과적이며 더 나은 TAC 상호 작용을 제공합니다. Cisco에서 개발한 이 툴은 네트워크에서 선택한 장치에 매우 안전하고 쉽게 액세스할 수 있는 방법을 TAC에 제공합니다. 자세한 내용은 다음을 참조하십시오. Cisco RADKit
참고: 지원되는 버전을 실행 중인지 확인하십시오. 릴리스의 End-of-Sale 및 End-of-Life 문서를 찾습니다. 필요한 경우 현재 소프트웨어 유지 관리 릴리스에 있는 버전으로 이동합니다. 그렇지 않으면 문제 해결 및 해결 옵션에 따라 TAC가 제한될 수 있습니다.
메모리 문제 해결에 대한 전체 문서를 보려면 다음 가이드를 참조하십시오.
ISR4K: Cisco 4000 Series ISR용 메모리 문제 해결 설명서
ASR1K의 경우: ASR 1000 Series 라우터 메모리 문제 해결 안내서
높은 메모리 사용량 이해
Cisco IOS XE 라우터에서 DRAM은 핵심 기능을 지원하는 가장 중요한 리소스 중 하나입니다. DRAM은 컨트롤 플레인 및 데이터 플레인 작업 모두에 필요한 다양한 데이터 유형 및 프로세스/기능 정보를 저장하는 데 사용됩니다.
IOS XE 라우터에서 DRAM의 주요 용도는 다음과 같습니다.
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 라우터의 증상 섹션을 사용할 수 있습니다. 형식은 다음과 같습니다.
이벤트 syslog 패턴 <패턴> ratelimit 300 maxrun 180
패턴을 트리거로 사용할 때 고려해야 할 사항 중 하나는 메모리 소비 속도에 따라 경고 임계값에 도달하면 로그가 생성된다는 것입니다. 수동으로 수행하려고 하면 사용자 또는 TAC에 더 자세한 문제 해결을 위한 충분한 시간이 없습니다.
Cron 타이머입니다. 30분마다 활성화되는 cron 타이머의 예:
이벤트 타이머 cron 이름 HalfHour cron-entry "*\30 * * *"
패턴에 비해 cron 타이머의 장점 중 하나는 정보를 수집하기 위해 장치에 메모리 리소스가 거의 다 떨어질 때까지 기다릴 필요가 없다는 것입니다. TAC는 적절한 모니터링 및 정보를 통해 메모리 소비율에 따라 경고 임계값에 도달하기 전에 손상된 프로세스를 식별할 수 있습니다.
참고: Ratelimit 및 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® 플랫폼에서 예기치 않은 다시 로드 문제 해결을 참조하십시오.