티스토리 뷰

ELK

Elasticsearch Heap Size

Network && Devops 2020. 1. 21. 14:31
반응형
반응형

  Elasticsearch는 Java 기반으로 동작을 합니다. Java는 가비시 컬렉터 (garbage-collected)에 의해서 관리가 되며, Java 객체는 힙(Heap) 이라고하는 메모리의 런타임 영역에 상주합니다.

 Elasticsearch는 기본적으로 1GB의 Heap 으로 구성이 되어 있습니다. 이 기본값은 대부분의 클러스터 구성에서 매우 작기 때문에 Elasticsearch에서 충분히 사용이 가능하도록 메모리 크기를 늘려 주어야 합니다. 

Elasticsearch에서 힙 크기를 변경하는 방법에는 두 가지가 있습니다. 가장 쉬운 것은 ES_HEAP_SIZE 이라는 환경 변수를 설정하는 것 입니다. 서버 프로세스가 시작되면이 환경 변수를 읽고 이에 따라 힙을 설정합니다. 예를 들어, 다음과 같이 명령 행을 통해 설정할 수 있습니다.

export ES_HEAP_SIZE=16g

또는 프로세스를 시작할 때 JVM 플래그를 통해 힙 크기를 전달할 수 있습니다 

반응형
ES_JAVA_OPTS = "-Xms10g -Xmx10g" ./ bin / elasticsearch

jvm 플래그 옵션은 jvm.option 파일을 통해서 설정을 할 수도 있습니다. 
Elasticsearch는 전체적인 Heap 사이즈를 jvm.option의 Xms (minimum heap size) and Xmx (maximum heap size) 값을  통해 조절이 가능합니다. 단, 두개의 사이즈 값은 모두 동일하게 세팅해 주어야 합니다. 

vi /etc/elasticsearch/jvm.option

-Xmx16g
-Xms16g

 

"32G 이하"

반응형

여기서 그러면 Heap 메모리의 적당한 값은 얼마가 되어야 할까요?

적당한 heap 메모리가 얼마인지는 워크로드에 따라 달라지겠지만, 너무 작은 Heap 메모리는 Out-of-Memory를 일으킬수 있고, 또 반대로 너무 큰 메모리는 GC(Gabage Colection)가 발생할 경우 응답 대기 시간이 길어질 수 있습니다. 

 Elasticsearch에서는 힙(Heap) 크기를 32G이하로 사용하도록 권장하고 있습니다.

jvm은 자신이 사용하기 위해 필요한 데이터를 heap 메모리에 올려 두고 사용을 하는데 이때 이 데이터 단위를 object라고 합니다. 그리고 이 object에 접근하기 위한 가상의 주소를 ordinary object pointers(이하 oop) 라고 부릅니다. 

 jvm은 32bit에서는 2의 32제곱인 4G까지 32bit의 oop를 사용을 하며 4G 이상은 64bit의 oop를 사용을 하게 됩니다. 그런데 64bit는 32bit에 비해 포인터가 크기 때문에(8배)  성능 저하가 발생을 하게 됩니다. 그래서 나온것이 64bit 에서도 32bit의 oop를 사용할 수 있는 compressed ordinary object pointers ( compressed oops ) 입니다. 

  native oop는 object 자체이지만, compressed oops 는 object의 주소의 오프셋을 가리킵니다.  
64bi의 jvm object pointer는 8바이트 단위이며, 8의 n의 배수마다 object 주소의 오프셋인 compressed oops를 사용하여 32bit 처럼 동작을 하게 됩니다.  8바이트 단위인 0, 8, 16, 24 의 object에 32bit의 0, 1, 2, 3을 사용하여 기존보다 8배  이상 사용이 가능하게 됩니다. 즉 사용 가능한 메모리가 32bit 4G 의 8배, 32G가 되는 것입니다. 

 만약 heap 사이즈가 32G를 넘어가게 되면 jvm이 64bit oop를 사용하게 되어 성능이 급격하게 떨어집니다. 그래서 Elastic에서는 32G 이상의 메모리를 사용하지 않도록 권고 하고 있는 것입니다. 

 그리고 시스템 전체 메모리의 절반인 약 50% 정도만 사용하는 것이 좋습니다. Elasticsearch에는 JVM 힙 이외의 용도로 메모리가 필요하므로 이를위한 공간을 확보하는 것이 중요합니다.

 

반응형

<참고 자료 >

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

https://en.wikipedia.org/wiki/Garbage_collection_(computer_science)

https://www.elastic.co/kr/blog/a-heap-of-trouble#fn5

https://wiki.openjdk.java.net/display/HotSpot/CompressedOops

반응형
반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함