목차

소개

사전 요구 사항

요구 사항

사용되는 구성 요소

표기 규칙

메모리 할당 실패란 무엇입니까?

증상

"EXEC를 만들 수 없음" 오류 또는 콘솔이 응답하지 않을 때

오류 메시지 이해

가능한 원인

프로세서 메모리 내(모든 플랫폼의 "풀 프로세서")

패킷 메모리의 경우("I/O" 또는 "프로세서", 하이엔드 라우터의 경우 "PCI", 7200 시리즈 및 VIP 카드의 경우)

문제 해결

보안 관련 문제

메모리 크기가 Cisco IOS 소프트웨어 이미지를 지원하지 않습니다.

메모리 누수 버그

*Dead* 프로세스

많은 양의 메모리가 정상 또는 비정상 프로세스에 사용됨

메모리 조각화 문제 또는 버그

프로세스의 메모리 할당 실패 = 인터럽트 레벨

사용자별 액세스 목록 다운로드로 인한 메모리 고갈

알려진 문제

대형 Cisco IOS 소프트웨어가 플래시 또는 Netboot에서 로드될 때 알려진 70x0 문제

IP 입력 및 CiscoWorks UT 검색

인터페이스에 공유 메모리가 부족합니다.

버퍼 누출 버그

라우터의 빠른 메모리 부족

IPFAST-4-RADIXDELETE: 접두사 항목 [IP_address]/[dec]을(를) 삭제하는 동안 오류가 발생했습니다(16진수가 필요한데 [16진수]를 가져옴).

%SYS-2-CHUNKEXPANDFAIL: TACL 비트맵에 대한 청크 풀을 확장할 수 없습니다. 사용 가능한 메모리가 없습니다.

요약

풀 "프로세서" 메모리 할당 실패

풀 "I/O" 메모리 할당 실패("프로세서", 하이엔드 라우터, "PCI", 7200 시리즈)

관련 정보

소개

이 문서에서는 메모리 할당 실패(MALLOCFAIL)의 증상 및 가능한 원인과 이러한 문제를 해결하는 방법에 대해 설명합니다.

사전 요구 사항

요구 사항

이 문서에 대한 특정 요건이 없습니다.

사용되는 구성 요소

이 문서의 정보는 다음 소프트웨어 및 하드웨어 버전을 기반으로 합니다.

- 모든 Cisco IOS® 소프트웨어 버전

- 모든 Cisco 라우터

참고: 이 문서는 CatOS 또는 MGX 플랫폼을 사용하는 Cisco Catalyst 스위치에는 적용되지 않습니다.

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

표기 규칙

문서 규칙에 대한 자세한 내용은 Cisco 기술 팁 표기 규칙을 참고하십시오.

메모리 할당 실패란 무엇입니까?

메모리 할당 실패는 다음 중 하나를 의미합니다.

- 라우터가 사용 가능한 모든 메모리를 사용했습니다(일시적으로 또는 영구적으로).

- 메모리가 작은 조각으로 분할되어 라우터가 사용 가능한 블록을 찾을 수 없습니다. 이는 프로세서 메모리(Cisco IOS[Cisco Internet Operating System]에서 사용) 또는 패킷 메모리(수신 및 발신 패킷에서 사용)에서 발생할 수 있습니다.

증상

메모리 할당 실패의 증상은 다음과 같지만 이에 국한되지는 않습니다.

- 콘솔 또는 로그 메시지: "%SYS-2-MALLOCFAIL: 메모리 할당(1028바이트)이 0x6015EC84, 풀 프로세서, 맞춤 0에서 실패했습니다."

- 거부된 텔넷 세션

- 콘솔에 어떤 명령을 입력하든 show processor memory 명령이 표시됩니다

- 일부 show 명령의 출력이 없습니다.

- "메모리 부족" 메시지

- 콘솔 메시지 "EXEC를 만들 수 없습니다. 메모리가 없거나 프로세스가 너무 많습니다."

- 라우터 중단, 콘솔 응답 없음

"EXEC를 만들 수 없음" 오류 또는 콘솔이 응답하지 않을 때

라우터의 메모리가 부족한 경우, 경우에 따라 라우터에 텔넷할 수 없습니다. 이때 문제 해결을 위한 데이터를 수집하기 위해 콘솔 포트에 대한 액세스 권한을 얻는 것이 중요합니다. 그러나 콘솔 포트에 연결할 때 다음 사항을 확인할 수 있습니다.

%% Unable to create EXEC - no memory or too many processes

이전 메시지가 표시되면 사용 가능한 메모리가 부족하여 콘솔 연결을 허용할 수 없습니다. 콘솔을 통한 데이터 캡처를 허용하기 위해 수행할 수 있는 단계가 있습니다. 라우터가 메모리를 확보하도록 도와주면 콘솔이 응답할 수 있으며, 문제 해결을 위해 라우터에서 필요한 데이터를 캡처할 수 있습니다.

참고: 라우터에 BGP(Border Gateway Protocol)가 구성된 경우 최적의 라우팅 달성 및 BGP 메모리 소비 감소를 참조하여 이 프로세스와 관련된 메모리 소비를 줄일 수 있습니다.

콘솔 포트의 메모리가 매우 부족한 경우 데이터를 캡처하기 위해 시도해야 할 단계입니다.

1. 라우터의 인터페이스에서 LAN 및 WAN 케이블을 분리합니다. 이로 인해 라우터가 패킷 전달을 중지할 수 있습니다.

2. 콘솔을 다시 확인합니다. 응답을 받고 명령을 실행할 수 있습니까? 잠시 후에 콘솔이 응답할 수 있는 충분한 메모리가 있어야 합니다.

3. 특별 권한 EXEC 모드(Router#)에서 필요한 정보를 수집합니다. 최소한 다음 명령의 전체 출력을 수집해야 합니다. show memory allocating-process totals (또는 show memory allocating-process totals를 사용할 수 없는 경우 show memory summary), show logging, and if possible, show technical-support !를 입력합니다.

4. 필요한 데이터를 수집한 후 모든 LAN 및 WAN 링크를 다시 연결하고 라우터의 메모리 사용량을 계속 모니터링합니다.

오류 메시지 이해

show logging 명령을 수행할 때 다음과 같은 내용이 표시되어야 합니다.

%SYS-2-MALLOCFAIL: Memory allocation of [X] bytes failed from

0x6015EC84, pool [Pool], alignment 0 -Process=

"[Process]" ipl= 6, pid=5

[X] = 라우터가 할당하려고 했으나 충분한 여유 메모리를 찾을 수 없는 바이트 수

[Pool]은 프로세서 메모리('Pool Processor') 또는 패킷 메모리('pool I/O')가 영향을 받는지 나타냅니다. 하이엔드 라우터(7000, 7500 Series)는 메인 DRAM(Dynamic Random Access Memory)에 버퍼가 있으므로 패킷 메모리 부족을 "풀 프로세서"로 보고할 수 있습니다. 7200 Series 및 VIP(Versatile Interface Processor) 카드는 패킷 메모리에 대한 풀 프로토콜 제어 정보('풀 PCI')"의 오류를 보고할 수 있습니다.

[Process]는 메모리 부족으로 인해 영향을 받은 프로세스입니다.

가능한 원인

프로세서 메모리 내(모든 플랫폼의 "풀 프로세서")

메모리 크기가 Cisco IOS Software 이미지를 지원하지 않습니다.

메모리 누수 버그

많은 양의 메모리가 정상 또는 비정상 프로세스에 사용됨

메모리 조각화 문제 또는 버그

프로세스의 메모리 할당 실패 = <interrupt level>

알려진 문제

플래시 또는 Netboot에서 대형 Cisco IOS 소프트웨어를 로드할 때 알려진 70x0 문제

IP 입력 및 CiscoWorks UT 검색

패킷 메모리의 경우("I/O" 또는 "프로세서", 하이엔드 라우터의 경우 "PCI", 7200 시리즈 및 VIP 카드의 경우)

인터페이스에 공유 메모리가 부족합니다.

버퍼 누출 버그

빠른 메모리가 부족한 상태에서 실행 중인 라우터

문제 해결

보안 관련 문제

일반적으로 MALLOCFAIL 오류는 네트워크에서 작동하는 웜 또는 바이러스와 같은 보안 문제로 인해 발생합니다. 라우터 Cisco IOS 업그레이드와 같이 최근 네트워크 변경 사항이 없는 경우 특히 이 문제가 원인일 가능성이 높습니다. 일반적으로 액세스 목록에 행을 추가하는 경우와 같이 컨피그레이션을 변경하면 이 문제의 영향을 줄일 수 있습니다. Cisco Product Security Advisories and Notices(Cisco 제품 보안 권고 및 공지) 페이지에는 가장 가능성 있는 원인 탐지 및 구체적인 해결 방법에 대한 정보가 포함되어 있습니다.

자세한 내용은 다음을 참조하십시오.

- 인터넷 위협에 대한 100가지 질문과 대답

- Cisco 위협 제어

메모리 크기가 Cisco IOS 소프트웨어 이미지를 지원하지 않습니다.

먼저 Download Software(소프트웨어 다운로드) 영역에서 실행하는 기능 집합 및 버전의 최소 메모리 크기를 확인합니다. 충분한지 확인하십시오. Cisco.com의 메모리 요구 사항은 대부분의 회사 네트워크에서 라우터가 올바르게 작동하기 위해 권장되는 최소 크기입니다. 실제 메모리 요구 사항은 프로토콜, 라우팅 테이블 및 트래픽 패턴에 따라 달라집니다.

참고: 등록된 Cisco 사용자만 Cisco 내부 정보 및 툴에 액세스할 수 있습니다.

메모리 누수 버그

Cisco 디바이스에서 show memory allocating-process totals 명령, show memory summary 명령 또는 show technical-support 명령(활성화 모드)의 출력을 받은 경우 출력 인터프리터를 사용하여 잠재적인 문제 및 수정 사항을 표시할 수 있습니다.

참고: 등록된 Cisco 사용자만 Cisco 내부 정보 및 툴에 액세스할 수 있습니다.

메모리 누수는 프로세스가 메모리를 요청하거나 할당한 다음 해당 작업을 완료했을 때 메모리를 사용 가능(할당 취소)하는 것을 잊어버릴 때 발생합니다. 그 결과, 메모리 블록은 라우터가 다시 로드될 때까지 예약된다. 시간이 지남에 따라 사용 가능한 메모리가 없을 때까지 해당 프로세스에 의해 더 많은 메모리 블록이 할당됩니다. 이 시점에서 메모리 부족 상황의 심각도를 기준으로 할 때, 라우터를 다시 로드하여 다시 작동하도록 하는 옵션만 있습니다.

이것은 Cisco IOS(Cisco Internet Operating System) 버그입니다. 이를 제거하려면 릴리스 시스템의 최신 버전으로 업그레이드하십시오. 예를 들어 Cisco IOS Software 릴리스 11.2(14)를 실행하는 경우 최신 11.2(x) 이미지로 업그레이드하십시오.

이렇게 해도 문제가 해결되지 않거나 라우터를 업그레이드하지 않으려는 경우 일정 기간에 걸쳐 일정한 간격으로 show processes memory 명령을 입력합니다(예: 빠른 누출 또는 느린 누출 여부를 기준으로 몇 시간 또는 며칠마다). 여유 메모리가 계속 감소하고 반환되지 않는지 확인합니다. 여유 메모리가 사라지는 속도는 누출을 초래하는 이벤트가 얼마나 자주 발생하는지에 따라 달라집니다. 메모리는 해제되지 않으므로 시간이 지남에 따라 메모리 스냅샷을 만들 경우 메모리를 사용하는 프로세스를 추적할 수 있습니다. 서로 다른 프로세스가 필요에 따라 메모리를 할당하거나 할당 해제하므로 차이를 확인할 수 있지만 누수가 지속되면 지속적으로 더 많은 메모리를 사용하는 프로세스가 한 개 표시되어야 합니다.

참고: BGP(Border Gateway Protocol) 또는 OSPF(Open Shortest Path First) 라우터와 같은 일부 프로세스에서는 1MB 이상의 메모리를 사용하는 것이 정상이지만, 이는 누수가 발생한다는 의미는 아닙니다.

더 많은 메모리를 사용하는 프로세스를 식별하려면 시간 간격 동안 show processes memory 명령의 Holding 열을 비교합니다. 때로는 한 프로세스가 몇 메가바이트의 메모리를 보유하고 있는 것을 매우 명확하게 볼 수 있다. 범인을 찾기 위해 여러 개의 스냅사진을 찍을 때도 있다. 상당량의 메모리가 손실된 경우 추가 문제 해결을 위해 show memory allocating-process totals 명령 또는 show memory summary 명령을 수집합니다. 그런 다음 Cisco TAC(Technical Assistance Center)에 연락하고 수집한 정보와 라우터의 기술 지원 요약을 제공합니다.

출력 인터프리터 도구를 사용하면 show memory allocating-process totals 명령 또는 show memory summary 출력의 분석을 받을 수 있습니다.

참고: 등록된 Cisco 사용자만 Cisco 내부 정보 및 툴에 액세스할 수 있습니다.

이 표에서는 show memory summary 명령 출력의 처음 세 행을 제공합니다.

Router>show memory summary

Head       Total (b)   Used (b)  Free (b)   Lowest (b)  Largest (b)

Processor   60AB4ED0   5550384     2082996   3467388    3464996     3454608

I/O         40000000   16777216    1937280   14839936   14839936    14838908

Total = 시스템 이미지가 로드되고 데이터 구조가 만들어진 후 사용할 수 있는 총 메모리 양입니다.

Used = 현재 할당된 메모리 양

여유 공간 = 현재 여유 메모리의 양.

Lowest = 라우터가 마지막으로 부팅된 이후 기록한 사용 가능한 메모리의 최소 양입니다.

Largest = 현재 사용 가능한 최대 여유 메모리 블록.

show memory allocating-process totals 명령은 show memory summary 명령의 처음 세 행과 동일한 정보를 포함합니다.

다음은 show processes memory 명령 출력에서 배울 수 있는 내용입니다.

Router>show processes memory

Total: 3149760, Used: 2334300, Free: 815460

PID   TTY   Allocated    Freed      Holding    Getbufs    Retbufs   Process

0     0     226548       1252       1804376    0          0         *Initialization*

0     0     320          5422288    320        0          0         *Scheduler*

0     0     5663692      2173356    0          1856100    0         *Dead*

1     0     264          264        3784       0          0         Load Meter

2     2     5700         5372       13124      0          0         Virtual Exec

3     0     0            0          6784       0          0         Check heaps

4     0     96           0          6880       0          0         Pool Manager

5     0     264          264        6784       0          0         Timers

6     0     2028         672        8812       0          0         ARP Input

7     0     96           0          6880       0          0         SERIAL A' detect

8     0     504          264        7024       0          0         ATM ILMI Input

9     0     0            0          6784       0          0         ILMI Process

10    0     136          0          6920       0          0         M32_runts pring

11    0     136          0          6920       0          0         Call drop procs

12    0     340          340        12784      0          0         ATMSIG Timer

13    0     445664       442936     13904      0          0         IP Input

14    0     2365804      2357152    17992      0          0         CDP Protocol

15    0     528          264        7048       0          0         MOP Protocols

16    0     188          0          9972       0          0         IP Background

17    0     0            1608       6784       0          0         TCP Timer

18    0     5852116      0          14236      0          0         TCP Protocols

Allocated = 라우터가 부팅된 이후 프로세스에서 할당한 총 바이트 수입니다.

Freed = 이 프로세스에서 해제한 총 바이트 수입니다.

Holding = 이 프로세스에서 현재 보유한 총 바이트 수입니다. 이 열은 이 프로세스로 인한 실제 메모리 양을 표시하므로 문제 해결에 가장 중요한 열입니다. 일부 프로세스에서 나중에 다른 프로세스에 의해 사용 가능한 풀로 반환되는 메모리 블록을 할당하므로 Holding이 Allocated에서 Freed를 뺀 값과 반드시 같지는 않습니다.

*Dead* 프로세스

*dead* 프로세스는 실제 프로세스가 아닙니다. 종료된 또 다른 프로세스의 컨텍스트 아래에 할당된 메모리를 설명하기 위한 것입니다. 이 프로세스에 할당된 메모리는 커널에 의해 재확보되며 필요한 경우 라우터 자체에서 메모리 풀로 반환됩니다. 이는 Cisco IOS에서 메모리를 처리하는 방식입니다. 블록을 생성한 프로세스가 종료되면(더 이상 실행되지 않음) 메모리 블록은 dead로 간주됩니다. 각 블록은 해당 블록을 생성한 프로세스의 주소와 pid를 추적합니다. 정기적인 메모리 계산 중에 스케줄러가 블록 pid에서 발견한 프로세스가 블록이 기억한 프로세스와 일치하지 않으면 해당 블록은 dead로 표시됩니다.

따라서 더 이상 실행되지 않는 프로세스의 제어 하에 프로세스 *Dead*에 속하는 것으로 표시된 메모리가 할당되었습니다. 그러한 상태에서 상당한 메모리 청크를 갖는 것은 정상이다. 예를 들면 다음과 같습니다.

텔넷 세션 전체에서 NAT(Network Address Translation)가 구성된 경우 메모리가 할당됩니다. 해당 메모리는 텔넷 프로세스("Virtual Exec")에서 설명됩니다. 이 프로세스가 종료되면 NAT 컨피그레이션의 메모리가 계속 사용됩니다. 이는 *dead* 프로세스와 함께 표시됩니다.

메모리가 어떤 컨텍스트에 할당되었는지 확인할 수 있습니다. show memory dead 명령, "What" 열 아래:

Router#show memory dead

Head   Total(b)    Used(b)    Free(b)  Lowest(b) Largest(b)

I/O    600000    2097152     461024    1636128    1635224    1635960

Processor memory

Address  Bytes Prev.    Next     Ref  PrevF   NextF   Alloc PC  What

1D8310       60 1D82C8   1D8378     1                  3281FFE   Router Init

2CA964       36 2CA914   2CA9B4     1                  3281FFE   Router Init

2CAA04      112 2CA9B4   2CAAA0     1                  3A42144   OSPF Stub LSA RBTree

2CAAA0       68 2CAA04   2CAB10     1                  3A420D4   Router Init

2ED714       52 2ED668   2ED774     1                  3381C84   Router Init

2F12AC       44 2F124C   2F1304     1                  3A50234   Router Init

2F1304       24 2F12AC   2F1348     1                  3A420D4   Router Init

2F1348       68 2F1304   2F13B8     1                  3381C84   Router Init

300C28      340 300A14   300DA8     1                  3381B42   Router Init

메모리 누수가 탐지되고 *Dead* 프로세스가 메모리를 소비하는 프로세스인 경우 show memory dead Cisco TAC에 제공되는 정보를 참조하십시오.

많은 양의 메모리가 정상 또는 비정상 프로세스에 사용됨

이는 검증하기 가장 어려운 원인 중 하나이다. 이 문제는 사용 가능한 메모리는 많지만 "가장 낮음" 열의 값이 작은 것이 특징이다. 이 경우, 정상 또는 비정상 이벤트(예: 대규모 라우팅 불안정성)가 발생하면 라우터는 단기간 동안 비정상적으로 많은 양의 프로세서 메모리를 사용하게 되며, 이 기간 동안 메모리가 부족합니다. 이 기간 동안 라우터는 MALLOCFAIL을 보고합니다. 곧 메모리가 해제되고 문제가 사라집니다(예: 네트워크 안정화). 메모리 부족은 다음과 같은 요인의 조합으로 인한 것일 수도 있습니다.

- 많은 양의 메모리를 사용한 후 네트워크가 불안정해지면 사용 가능한 메모리가 0으로 푸시되는 메모리 누수

- 라우터에 메모리가 부족하여 시작할 수 없지만 드물게 발생하는 네트워크 이벤트 중에만 문제가 발견되었습니다.

라우터가 리부팅되지 않은 경우 show memory allocating-process totals 명령(또는 show memory summary 만일 show memory allocating-process totals  을(를) 참조하고 처음 세 줄을 살펴보십시오. 로그 메시지는 어떤 프로세스에서 많은 메모리를 사용했는지에 대한 단서를 제공할 수 있습니다.

대용량 메모리 사용이 다음과 같은 이유 때문인 경우:

- 정상적인 경우 해결 방법은 메모리를 더 설치하는 것입니다.

- 드문 경우이거나 비정상적인 경우입니다. 관련 문제를 해결하십시오. 그런 다음 미래의 "보험"을 위해 추가 메모리를 구입하기로 결정할 수 있습니다.

메모리 조각화 문제 또는 버그

이 상황은 프로세스가 많은 양의 프로세서 메모리를 사용한 다음 대부분 또는 전부를 해제하고 이 프로세스 또는 문제를 통해 메모리를 할당한 다른 프로세스에 의해 할당된 메모리 조각을 남긴다는 것을 의미합니다. 동일한 이벤트가 여러 번 발생하면 메모리가 매우 작은 블록으로 분할되어 더 큰 메모리 블록이 필요한 모든 프로세스에서 필요한 메모리 양을 얻을 수 없게 됩니다. 이는 라우터에 연결할 수 없는 범위 내에서 라우터 작업에 영향을 줄 수 있으며, 메모리가 잘못 조각화된 경우 프롬프트를 표시합니다.

이 문제는 의 "Largest(최대)" 열(20,000바이트 미만)에서 낮은 값으로 나타나는 것이 특징입니다 show memory 명령을 사용하지만 "Freed(해제됨)" 열의 값이 충분하거나(1MB 이상) 두 열 사이의 다른 넓은 차이가 있습니다. Cisco IOS에 프래그먼트화 루틴이 없기 때문에 라우터의 메모리가 매우 부족한 경우 이 문제가 발생할 수 있습니다.

메모리 조각화가 의심되는 경우 일부 인터페이스를 종료합니다. 이렇게 하면 조각난 블록을 제거할 수 있습니다. 이것이 작동하면, 메모리는 정상적으로 작동하고, 당신이 해야 할 일은 메모리를 더 추가하는 것이다. 인터페이스를 종료해도 문제가 해결되지 않으면 버그가 될 수 있습니다. 가장 좋은 방법은 수집한 정보를 Cisco 지원 담당자에게 문의하는 것입니다.

프로세스의 메모리 할당 실패 = 인터럽트 레벨

이러한 상황은 오류 메시지의 프로세스에 의해 식별될 수 있다. 다음 예제와 같이 프로세스가 <interrupt level>로 나열되면 소프트웨어 문제로 인해 메모리 할당 실패가 발생합니다.

"%SYS-2-MALLOCFAIL: Memory allocation of 68 bytes failed from 0x604CEF48,

pool Processor, alignment 0-Process=

, ipl= 3"

이것은 Cisco IOS(Cisco Internet Operating System) 버그입니다. 버그 툴킷을 사용하여 이 문제와 일치하는 소프트웨어 버그 ID를 검색할 수 있습니다. 소프트웨어 버그가 확인되면 문제를 해결할 수 있는 수정 사항이 포함된 Cisco IOS 소프트웨어 버전으로 업그레이드합니다.

참고: 등록된 Cisco 사용자만 Cisco 내부 정보 및 툴에 액세스할 수 있습니다.

사용자별 액세스 목록 다운로드로 인한 메모리 고갈

액세스 목록은 사용자 단위로 사용될 때 많은 메모리를 사용할 수 있습니다. 액세스 목록이 너무 커서 미니 ACL(Access Control List)로 분류할 수 없으며 터보 ACL로 컴파일됩니다. 이러한 상황이 발생할 때마다 TACL 프로세스는 새 ACL을 시작하고 처리해야 합니다. 이렇게 하면 컴파일 시간과 사용 가능한 프로세스 시간에 따라 트래픽이 허용되거나 거부될 수 있습니다.

컴파일된 ACL은 XCM으로 전송해야 합니다. 사용 가능한 공간이 제한되어 있고 메모리가 실행되면 콘솔 메시지가 표시되고 메모리 조각 모음이 시작됩니다.

해결 방법은 다음과 같습니다.

- 간결한 ACL 사용, 미니 ACL로 컴파일할 수 있고 컴파일을 위한 메모리 소비와 프로세스 성능을 모두 줄일 수 있는 ACE(Application Control Engine) 수 감소.

- radius 특성 filterID를 통해 참조되는 라우터에서 사전 정의된 ACL의 사용.

알려진 문제

대형 Cisco IOS 소프트웨어가 플래시 또는 Netboot에서 로드될 때 알려진 70x0 문제

7000 RP(Route Processor)는 Flash에서 이미지를 부팅할 때 먼저 ROM 이미지를 로드한 다음 플래시 이미지를 메모리에 로드합니다. 기존 RP에는 16MB의 메모리만 있으며, 버전 11.0 이상의 Cisco IOS Software 릴리스의 엔터프라이즈 버전은 압축하지 않을 경우 8MB보다 큽니다. 따라서 ROM에서 이미지를 로드한 다음 Flash를 실행하면 7000 RP의 메모리가 부족해지거나 부팅 과정에서 메모리가 조각화되어 라우터에 메모리 관련 오류 메시지가 표시될 수 있습니다.

해결 방법은 컨피그레이션 레지스터에서 Fast Boot를 활성화하여 RP가 Cisco IOS Software 이미지의 최소 하위 집합만 ROM에 로드한 다음 전체 Cisco IOS Software를 플래시에서 로드하도록 하는 것입니다. 빠른 부팅을 활성화하려면 컨피그레이션 레지스터를 0x2112로 설정합니다. 또한 부팅 프로세스의 속도를 높일 수 있습니다.

IP 입력 및 CiscoWorks UT 검색

CiscoWorks의 UT 검색 기능을 사용하면 일부 라우터에서 사용 가능한 메모리의 양이 매우 작아질 수 있습니다. show proc memory 명령은 "IP input" 프로세스에 의해 유지되는 많은 메모리를 나타낼 수 있습니다. 이는 "IP 입력" 프로세스에 대한 정상 또는 비정상 프로세스에 사용된 메모리 양이 많은 특정 사례이며, 메모리의 부족 상태로 인해 메모리가 프래그먼트화되는 경우 메모리 프래그먼트화 문제가 발생할 수도 있습니다.

UT Discovery(UT 검색) 기능을 사용하면 네트워크 관리 스테이션에서 검색된 모든 서브넷의 모든 IP에 대해 ping 스윕을 전송합니다. 메모리 문제는 모든 새 대상에 대해 새 캐시 항목이 생성되기 때문에 라우터의 IP 고속 스위칭 캐시 크기가 증가함에 따라 발생합니다. 캐시의 엔트리에 사용되는 마스크는 서브넷이 어떻게 제출되는지에 따라 달라지므로, 주요 네트워크에 32비트 마스크(예: 루프백 주소)가 있는 주소가 있으면 해당 네트워크에 대한 모든 엔트리가 32비트 마스크를 사용하게 됩니다. 따라서 많은 수의 캐시 항목이 생성되고 많은 양의 메모리가 사용됩니다.

최상의 솔루션은 UT 검색을 비활성화하는 것입니다. 이 작업은 다음 단계를 통해 수행할 수 있습니다.

1. C:\Program Files\CSCOpx\etc\cwsi\ANIServer.properties으로 이동합니다.

2. "UTPingSweep=0"을 추가합니다.

3. ANI를 다시 시작합니다.

이로 인해 사용자 추적 테이블이 일부 최종 서버를 누락하거나 최신 상태가 아닐 수 있지만(UT를 사용하는 사용자 등록 툴이라는 또 다른 Cisco 애플리케이션에서 문제가 될 수 있음) SNMP 트래픽만 사용하는 캠퍼스 검색에는 영향을 주지 않습니다. CEF 스위칭은 또한 이러한 상황을 개선할 수 있습니다(CEF의 경우 부팅 시 라우팅 테이블에서 IP 캐시가 생성됨). CEF 및 사용 가능한 다른 스위칭 경로에 대한 자세한 내용은 How to Choose the Best Router Switching Path for Your Network(네트워크에 가장 적합한 라우터 스위칭 경로 선택 방법)를 참조하십시오.

유사한 메모리 부족 상황을 초래할 수 있는 다른 많은 응용 프로그램이 있습니다. 대부분의 경우 문제의 근본 원인은 라우터가 아니라 애플리케이션 자체입니다. 일반적으로 애플리케이션의 컨피그레이션을 확인하여 이러한 패킷 스톰을 방지할 수 있어야 합니다.

인터페이스에 공유 메모리가 부족합니다.

일부 라우터(예: 2600, 3600, 4000 Series)는 특정 인터페이스 프로세서를 지원하려면 최소 I/O 메모리가 필요합니다.

다시 로드한 후에도 라우터의 공유 메모리가 부족한 경우 인터페이스를 물리적으로 제거하여 이 문제를 해결할 수 있습니다.

3600 Series 라우터의 경우 global configuration 명령  memory-size iomem i/o-memory-percentage I/O 메모리 및 프로세서 메모리에 사용할 DRAM의 비율을 재할당하는 데 사용할 수 있습니다. i/o-memory-percentage에 허용되는 값은 10, 15, 20, 25(기본값), 30, 40 및 50 입니다. I/O 메모리에는 최소 4MB의 메모리가 필요합니다.

이 문제를 해결하려면 다음을 참조하십시오.

- 4000/4500/4700 라우터의 공유 메모리 요구 사항

버퍼 누출 버그

의 출력이 있는 경우  show buffers  또는  show technical-support  cisco 디바이스에서 명령(활성화 모드)을 사용하면 출력 인터프리터를 사용하여 잠재적인 문제 및 수정 사항을 표시할 수 있습니다.

참고: 등록된 Cisco 사용자만 Cisco 내부 정보 및 툴에 액세스할 수 있습니다.

프로세스가 버퍼로 완료되면 버퍼는 비워두어야 합니다. 버퍼 누수는 코드가 버퍼 처리를 잊어버리거나 패킷을 처리한 후 버퍼 비우기를 잊어버릴 때 발생합니다. 그 결과, 버퍼에 더 많은 패킷이 중단됨에 따라 버퍼 풀이 계속 증가합니다. 버퍼 누수는 show buffers 명령을 실행합니다. 공용 버퍼 풀 중 일부는 사용 가능한 버퍼가 거의 없는 비정상적으로 커야 합니다. 다시 로드한 후에는 사용 가능한 버퍼 수가 총 버퍼 수에 절대 근접하지 않음을 확인할 수 있습니다.

출력 인터프리터 도구를 사용하면 show buffers 성과.

아래 예에서는 중간 버퍼가 영향을 받습니다. 이 show buffers  명령은 거의 8094개의 버퍼가 사용되고 해제되지 않았음을 나타냅니다(총 8122개에서 여유 버퍼 28개를 뺀 값).

Public buffer pools: Small buffers, 104 bytes (total 50, permanent 50):

50 in free list (20 min, 150 max allowed)

403134 hits, 0 misses, 0 trims, 0 created

0 failures (0 no memory)

Middle buffers, 600 bytes (total 8122, permanent 200):

28 in free list (10 min, 300 max allowed)

154459 hits, 41422 misses, 574 trims, 8496 created

Big buffers, 1524 bytes (total 50, permanent 50):

50 in free list (5 min, 150 max allowed)

58471 hits, 0 misses, 0 trims, 0 created

0 failures (0 no memory)

VeryBig buffers, 4520 bytes (total 10, permanent 10):

10 in free list (0 min, 100 max allowed)

0 hits, 0 misses, 0 trims, 0 created

0 failures (0 no memory)

Large buffers, 5024 bytes (total 0, permanent 0)

0 in free list (0 min, 10 max allowed)

0 hits, 0 misses, 0 trims, 0 created

0 failures (0 no memory)

Huge buffers, 18024 bytes (total 0, permanent 0):

0 in free list (0 min, 4 max allowed)

0 hits, 0 misses, 0 trims, 0 created

0 failures (0 no memory)

이는 Cisco IOS 소프트웨어 버그입니다. 릴리스 트레인의 최신 버전으로 업그레이드하여 알려진 버퍼 누수 버그를 수정합니다(예: Cisco IOS Software Release 11.2(14)를 실행 중인 경우 최신 11.2(x) 이미지로 업그레이드합니다. 이 방법이 도움이 되지 않거나 라우터를 업그레이드할 수 없는 경우 라우터의 메모리가 부족할 때 문제 풀에 대해 다음 명령을 실행합니다. 이러한 명령은 버퍼의 내용에 대한 추가 정보를 표시할 수 있습니다.

- show buffer old  할당된 버퍼가 1분 이상 지난 것을 표시합니다.

- show buffer pool   (small - middle - big - verybig - large - huge)    지정된 풀에 대한 버퍼의 요약을 표시합니다.

- show buffer pool (small - middle - big - verybig - large - huge) dump   는 지정된 풀을 사용 중인 모든 버퍼의 16진수/ASCII 덤프를 보여줍니다.

자세한 내용은 버퍼 누수 문제 해결을 참조하십시오.

라우터의 빠른 메모리 부족

이 문제는 7500 시리즈에만 해당됩니다. 라우터에 "고속" 메모리가 부족하면 기본 DRAM(동적 RAM)을 대신 사용할 수 있습니다. 추가 작업은 필요하지 않습니다.

IPFAST-4-RADIXDELETE: 오류  trying  접두사 항목 [IP_address]/[dec]을(를) 삭제하려면 [hex]가 필요합니다. [hex]가 필요합니다.

IPFAST-4-RADIXDELETE: 접두사 항목 [IP_address]/[dec]을(를) 삭제하는 동안 오류가 발생했습니다(16진수[16진수] 예상, 받음 [16진수]). 오류 메시지는 메모리의 라우터 고속 스위칭 캐시 테이블이 손상되었음을 나타냅니다. 라우터가 정상적인 프로세스 또는 clear ip cache 명령을 입력하면 메모리 손상으로 인해 시스템이 항목을 삭제하지 못합니다. 라우터가 이러한 항목을 삭제하지 못하면 IPFAST-4-RADIXDELETE 메시지가 보고됩니다.

캐시 테이블 메모리 손상 문제를 해결하려면 라우터를 하드 재부팅해야 합니다. 재부팅하면 시스템 메모리 구조를 다시 조각할 수 있으며 빠른 캐시에서 손상 없이 재구축할 수 있습니다.

%SYS-2-CHUNKEXPANDFAIL: TACL 비트맵에 대한 청크 풀을 확장할 수 없습니다. 사용 가능한 메모리가 없습니다.

%SYS-2-CHUNKEXPANDFAIL에 대한 이유: TACL 비트맵에 대한 청크 풀을 확장할 수 없습니다. 메모리 사용 불가 오류 메시지는 지정된 청크 풀을 늘리기 위한 프로세서 메모리가 부족하다는 것입니다. 비정상적으로 작동하는 프로세스에 의해 발생할 수 있습니다.

해결 방법은 라우터의 메모리 사용량을 모니터링할 수 있도록 이러한 명령의 출력을 주기적으로 캡처하는 것입니다(문제 빈도에 따라).

- show processes memory sorted

- show memory statistics

- show memory allocating-process totals

요약

풀 "프로세서" 메모리 할당 실패

다음 단계를 수행합니다.

1. Cisco IOS 소프트웨어 릴리스 버전 또는 기능 집합에 대한 메모리 요구 사항을 확인합니다.

2. 가능한 경우, 해당 릴리스 트레인의 최신 Cisco IOS 소프트웨어 릴리스 버전으로 업그레이드하십시오.

3. 정상 또는 비정상 프로세스에 사용되는 많은 양의 메모리를 확인합니다. 필요한 경우 메모리를 추가합니다.

4. 누출 또는 조각화(하이엔드 라우터의 버퍼 누출)인지 확인합니다.

5. 관련 정보를 수집하고 TAC에 문의하십시오.

풀 "I/O" 메모리 할당 실패("프로세서", 하이엔드 라우터, "PCI", 7200 시리즈)

다음 단계를 수행합니다.

1. 공유 메모리 요구 사항을 확인합니다(인터페이스에 대한 공유 메모리 부족 참조).

2. 가능한 경우, 해당 릴리스 트레인의 최신 Cisco IOS 소프트웨어 릴리스 버전으로 업그레이드하십시오.

3. 어떤 버퍼 풀이 영향을 받는지 확인하고 관련 정보를 수집한 후 Cisco TAC에 문의하십시오.

관련 정보

- 버퍼 누수 문제 해결

- 라우터 중단 문제 해결

- Cisco 기술 지원 및 다운로드