MCCS 64bit 가상메모리(VIRT) 사용량 제한

Table of Contents

– Environment

MCCS 64bit 버젼에서 가상메모리를 필요 이상으로 점유함.

– Symptoms

– 많은 소켓과 코어사이의 높은 확장성을 제공하기 위한 메모리 할당 기능으로 Arena라는 기능이 있으며 이 기능은 Malloc() 함수를 사용합니다.

– glibc 2.10 에서 최초 소개되었고 RHEL/CentOS 6 에서 7 까지 사용되는 glibc 는 2.12 ~ 2.17 이며 모두 Arena 기능을 사용합니다.

– malloc() 은 코어당 메모리 풀을 생성하는데 기본값으로 32비트 시스템에서는 2개, 64비트 시스템에서는 8개를 생성합니다.

– 또한 이 malloc() arena 의 크기는 32bit 에서는 1MB, 64bit 에서는 64MB 입니다.

– Cause

이를 바탕으로 core 당 할당되는 메모리 풀의 크기를 계산해보면

1 코어당 64bit 환경에서 기본으로 할당되는 메모리 풀

64MB * 8 * 1(Core) = 512MB

8 코어 일 경우

64MB * 8 * 8(Core) = 4096MB

16 코어 일 경우

64MB * 8 * 16(Core) = 8192MB

즉, 8G + JVM 메모리 = MCCS 가 할당받은 VIRT 가 됩니다. 

– Solution

/etc/init.d/mccs_agent 스크립트에서 start 부분에 아래값을 추가한후 mccs agent를 재기동 한다.

MALLOC_ARENA_MAX=1

– Workaround

  #