du.study기록공간

Elasticsearch heap memory setting 본문

DB

Elasticsearch heap memory setting

du.study 2020. 3. 6. 00:57
728x90

이번에는 Elasticsearch heap 메모리 설정 관련 포스팅을 작성하고자 합니다.

 

해당글은 아래 사이트들을 참고하였습니다.

https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html

https://www.elastic.co/guide/en/elasticsearch/guide/current/heap-sizing.html

 

es를 설치하고(아무리 테스트서버라지만) 메모리설정을 하지 않았더니 매우 작은 범위의 메모리를 es가 차지하고 있었습니다.

 

별다른 설정을 하지않으면 es는 기본적으로 1g를 사용하게 됩니다.( 딱 1g는 아니고)

 

해당설정은 zio 파일로 설치를 하셨다면 {ES_HOME}/config/jvm.options  그 외의 경우 /etc/elasticsearch/jvm.options에 다음과 같은 값이 있습니다.

-Xms1g 
-Xmx1g 

어떻게 메모리를 설정할지 고민하다 es 공식 페이지에서 권장하는 vm절반만큼 설정을 해줬습니다.

 

 

조금 특이한 점이 있다면 메모리가 32G를 넘지 않는것을 권장하고 있습니다.

 

ES의 경우 32G까지는 32 bit 시스템처럼 포인터를 사용하게 됩니다. 일반적인 32 bit 시스템이라면 4G의 주소공간을 사용하겠지만, ES는 약간의 트릭을 이용하여 32 BIT 시스템으로 32G까지 사용하고 있습니다. 그 방법은 바로 compressed ordinary object pointers 라는 방식을 사용합니다.

 

일반적인 ordinary object pointers 방식이라면(64 BIT , 32G 이상이면 해당방식 사용) 직접 접근하는 Object를 가리키겠지만, compressed ordinary object pointers 의 경우 주소의 offset (the pointers reference object offsets) 을 가르키게 됩니다.

 

compressed ordinary object pointers 방식에서 실제 메모리를 참고하는 경우 다음과 같은 연산이 필요하게 됩니다.

native oop = (compressed oop << 3)

if (compressed oop is null)
  native oop = null
else
  native oop = base + (compressed oop << 3)

(시작 주소가 0이 아닌경우 추가 연산이 필요)

 

해당 방식을 통해 일반 4G X 8( <<3) = 32G 영역만큼 32bit 포인터는 ES는 32 BIT포인터로 4G가 아닌 최대 32기가 까지 가리키게 됩니다.

 

해당 영역을 넘으면 64BIT 포인터로 전환되어 동작하게 됩니다.

 

 

서버 메모리를 32G이상 설정할만큼 받아볼 날이 과연..! 언제쯤일진 모르겠으나. 추가로 es구성을 하게되면 해당내용을 기억해둬야겠습니다.

 

728x90

'DB' 카테고리의 다른 글

CentOS, Elasticsearch 6.x Install  (0) 2020.03.04
MongoDB sharding Architecture  (0) 2019.11.15
Comments