목차

소개

배경 정보

문제 해결

누설 책임이 있는 애플리케이션 식별

Allocator PC 디코딩

MallocLite 메모리 통계 조사

MallocLite 비활성화

소개

이 문서에서는 Cisco IOS® 소프트웨어 플랫폼에서 MallocLite 메모리 누수를 해결하는 방법에 대해 설명합니다.

또한 Cisco TAC(Technical Assistance Center) 케이스를 열거나 디바이스를 다시 로드하기 전에 수집해야 하는 정보를 지정합니다.이 문서에 언급된 출력을 수집하고 이를 TAC 케이스에 첨부하여 신속하게 문제를 해결합니다.

배경 정보

MallocLite는 메모리 관리자가 128바이트보다 작거나 같은 할당에 대해 청크라고 하는 작은 고정 크기의 메모리를 할당하기 위해 사용합니다.작은 메모리 할당에는 각 할당에 대한 블록 헤더의 오버헤드가 없습니다.이 기능은 프로세서 메모리 풀에만 지원됩니다.

모든 메모리 블록 헤더는 약 48바이트의 메모리를 사용하며, 가장 작은 블록은 약 24바이트를 사용합니다.각 할당에 대해 Cisco IOS 소프트웨어의 기존 접근 방식을 사용하면 실제 데이터를 8바이트만 할당하더라도 최소 72바이트(48 + 24)의 메모리를 소비하게 됩니다.

MallocLite를 사용하면 청크를 사용하여 이러한 오버헤드를 줄일 수 있습니다.청크를 관리해야 하기 때문에 여전히 약간의 오버헤드가 있습니다.그러나 청크는 고정된 크기이므로 블록 이외의 다른 방식으로 관리되며 오버헤드는 더 적습니다.

MallocLite 메모리를 사용하여 적절하게 해제해야 하는 응용 프로그램의 책임입니다.MallocLite는 메모리 사용자를 마스크 처리합니다.

문제 해결

참고: Cisco CLI Analyzer(등록된 고객만 해당)는 특정 show 명령을 지원합니다.show 명령 출력의 분석을 보려면 Cisco CLI Analyzer를 사용합니다.

누설 책임이 있는 애플리케이션 식별

malloclite 키워드로만 검색하는 경우 일반적으로 기존 버그를 식별하기 어렵습니다.

다음 예에서는 *MallocLite* 프로세스가 비정상적인 양의 메모리를 보유하고 있음을 보여 줍니다.

#show processes memory sorted

Processor Pool Total:  1614282720  Used:  1544726580  Free:   69556140

I/O Pool Total:  313524224   Used:  115564032   Free:  197960192

PID TTY  Allocated      Freed    Holding    Getbufs    Retbufs Process

0   0          0          0  1476043512         0          0 *MallocLite*

유출의 원인이 되는 정확한 애플리케이션을 식별해야 합니다.다음과 같은 세 가지 식별 방법이 있습니다.

- 할당자 PC를 디코딩합니다.

- MallocLite 메모리 통계를 조사합니다.

- MallocLite를 비활성화합니다.

Allocator PC 디코딩

MallocLite가 켜져 있는 경우에도 일반적으로 메모리를 요청하는 기능을 확인할 수 있습니다.보고된 이름이 MallocLite인 경우에도 show memory alloc-process totals 명령의 출력에는 다른 PC 값이 표시될 수 있습니다.

#show memory allocating-process totals

<snip>

Allocator PC Summary for: Processor

Displayed first 2048 Allocator PCs only

PC          Total   Count  Name

0x620BE3C4   42807572     594  MallocLite

0x620ADDD4   13597308     193  MallocLite

0x60738BB0    8909824     122  MallocLite

0x620AE0E0    2060716      31  MallocLite

0x620AE10C    1982780      30  MallocLite

Cisco TAC 엔지니어는 목록의 맨 위에서 PC 값을 디코딩할 수 있습니다(총계가 가장 높음). 이렇게 하면 메모리 누수가 있는 애플리케이션을 식별할 수 있습니다.

MallocLite 메모리 통계 조사

Cisco IOS 소프트웨어 릴리스 15.1T에서 추가된 개선 사항 중에는 각 PC에서 할당한 MallocLite 메모리의 요약을 표시하는 새로운 CLI가 있었습니다.show memory lite-chunks 명령을 사용하면 대량의 MallocLite 블록을 사용하는 애플리케이션을 식별할 수 있습니다.

show memory lite-chunks { statistics | totals } { summary { pool | { all | pool } } }

show memory lite-chunks 명령에 대한 자세한 내용은 명령 참조를 참조하십시오.

CLI   : show memory lite-chunks totals

DESC  : Summary of all pools, based on alloc pc.

This cli can be used to find the alloc_pc which is using large amount memory

allocated from all mlite pools

CLI   : show memory lite-chunks statistics

DESC  : Displays number of allocated & free mlite chunks

CLI   : show memory lite-chunks summary pool pool

DESC  : Show summary of particular mlite pool

This cli can be used to find the alloc_pc which is using large amount of memory

in individual mlite pool

CLI   : show memory lite-chunks summary pool all

DESC  : Show individual summary of all mlite pools

CLI   : show memory lite-chunks pool pool

DESC  : Show All chunk elements in the specified pool

CLI   : show memory lite-chunks pool all

DESC  : show all chunk elements in all mlite pools

이 명령의 출력 예는 다음과 같습니다.

#show memory lite-chunks ?

pool        Malloc lite pool

statistics  Malloc lite statistics

summary     Malloc Lite summary

totals      Malloc Lite Allocating totals

#show memory lite-chunks statistics

Pool       Inuse       Free

8-Bytes         140       1904

20-Bytes         173       1313

44-Bytes         171        791

68-Bytes          24        687

96-Bytes          26        519

128-Bytes          20        410

#show memory lite-chunks totals

PC         Total       Count

26067AE0          2112          33

2269E68C          1932          29

2269FACC          1664          29

2269F964          1664          26

2269FA9C          1580          29

26067FB4          1360          34

23CD2A0C          1036           7

#show memory lite-chunks pool ?

128-Bytes  128 bytes pool

20-Bytes   20 bytes pool

44-Bytes   44 bytes pool

68-Bytes   68 bytes pool

8-Bytes    8 bytes pool

96-Bytes   96 bytes pool

all        all pools

#show memory lite-chunks summary pool 8

8 bytes pool

PC         Total       Count

2269FB10           812          29

23612084           700          25

2269F9F8           700          25

2269F9EC           700          25

TAC 엔지니어는 총계가 가장 높은 PC 값을 디코딩하고 메모리를 유출하는 애플리케이션을 식별할 수 있습니다.

MallocLite 비활성화

MallocLite 기능은 기본적으로 활성화되어 있습니다.MallocLite 누수를 조사하려면 MallocLite를 비활성화할 수 있습니다.

(config)#no memory lite

유출된 메모리는 다음 다시 로드할 때까지 MallocLite에 계속 있습니다.그러나 show processes memory sorted 및 show memory allocaing-process totals 명령으로 추가 누수를 모니터링할 수 있습니다.그 유출은 이제 실제 과정 하에 나타날 것이다.

디바이스에서 메모리가 매우 부족한 경우 컨피그레이션을 저장하고 디바이스를 다시 로드하여 메모리를 해제해야 합니다.

#wr

#reload

메모리는 시간이 지남에 따라 다시 배포될 수 있으므로 show processes memory sorted 및 show memory allowing-process totals 명령을 사용하여 해당 시점부터 메모리 사용량을 모니터링합니다.

참고:no memory lite 명령을 사용하여 MallocLite를 효과적으로 비활성화하고 디바이스를 다시 로드하면 show memory lite-chunks 명령의 출력이 비어 있습니다.

memory lite 명령에 대한 자세한 내용은 명령 참조를 참조하십시오.