Elasticsearch 최대 메모리 크기를 변경하는 방법


99

기본 구성이 Elasticsearch 인 Apache 서버가 있으며 기본 구성의 최대 크기가 1GB 인 것을 제외하고는 모든 것이 완벽하게 작동합니다.

Elasticsearch에 저장할 문서가 너무 많지 않아서 메모리를 줄이고 싶습니다.

-XmxJava 구성에서 매개 변수 를 변경해야하는 것을 보았지만 방법을 모르겠습니다.

나는 이것을 실행할 수 있음을 보았다.

bin/ElasticSearch -Xmx=2G -Xms=2G

그러나 Elasticsearch를 다시 시작해야 할 때 이것은 손실됩니다.

Elasticsearch가 서비스로 설치된 경우 최대 메모리 사용량을 변경할 수 있습니까?


어떤 운영 체제와 버전? Elasticsearch 버전? Elasticsearch를 어떻게 설치 했습니까?
James Addison

1
1 노드 설정에 장점이 없기 때문에 복제본과 샤드의 수를 줄이고 싶을 수 있습니다. /etc/elasticsearch/elasticsearch.yaml에 추가하면 index.number_of_shards: 1 index.number_of_replicas: 0 불필요한 작업을 수행하지 않음으로써 메모리와 CPU를 절약 할 수 있습니다. .
neo112

답변:


127

에서 ElasticSearch> = 5 문서가있다 변경 위의 답변 중 아무도 나를 위해 일한 의미한다.

나는 변화 시도 ES_HEAP_SIZE/etc/default/elasticsearch와에 etc/init.d/elasticsearch,하지만 난 실행할 때 ps aux | grep elasticsearch출력은 여전히 보여 주었다 :

/usr/bin/java -Xms2g -Xmx2g # aka 2G min and max ram

다음과 같이 변경해야했습니다.

/etc/elasticsearch/jvm.options

# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space

-Xms1g 
-Xmx1g 
# the settings shipped with ES 5 were: -Xms2g
# the settings shipped with ES 5 were: -Xmx2g

3
그리고 맥 OS 10.12에 Elasticsearch 5.2 나는이 파일을 발견/usr/local/opt/elasticsearch/libexec/config/jvm.options
victorpolko

1
이 작업이 aws ami 인스턴스 (RPM으로 설치됨)에서 작동하는지 확인할 수 있지만 먼저 / etc / sysconfig / elasticsearch에서 MAX_LOCKED_MEMORY = unlimited를 설정하고 /etc/elasticsearch/elasticsearch.yml에서 bootstrap.memory_lock : true를 설정했습니다
mork

2
이것은 Windows에서 작동하지 않습니다. 정답은 다음과 같습니다. stackoverflow.com/questions/28798845/…
cbp

4
사제, 설치할 때, 파일은 여기에 있습니다 :/usr/local/etc/elasticsearch/jvm.options
Milovan Zogovic

117

2016 년 11 월 24 일 업데이트 : Elasticsearch 5가 JVM 구성 방식을 변경 한 것 같습니다. 여기에서이 답변을 참조하십시오 . 아래 답변은 여전히 ​​5 미만 버전에 적용됩니다.

tirdadc, 아래 의견에 이것을 지적 해 주셔서 감사합니다.


기억력과 ES에 대해 궁금 할 때 다른 사람들과 공유하는 pastebin 페이지가 있습니다. 나를 위해 잘 작동했습니다 : http://pastebin.com/mNUGQCLY . 여기에도 내용을 붙여 넣겠습니다.

참조 :

https://github.com/grigorescu/Brownian/wiki/ElasticSearch-Configuration http://www.elasticsearch.org/guide/reference/setup/installation/

메모리 및 파일 수 제한을 수정하려면 다음 파일을 편집하십시오. 이 지침은 Ubuntu 10.04를 가정하고 이후 버전 및 기타 배포 / OS에서 작동 할 수 있습니다. ( 편집 : Ubuntu 14.04에서도 작동합니다.)

/etc/security/limits.conf :

elasticsearch - nofile 65535
elasticsearch - memlock unlimited

/ etc / default / elasticsearch (CentOS / RH : / etc / sysconfig / elasticsearch) :

ES_HEAP_SIZE=512m
MAX_OPEN_FILES=65535
MAX_LOCKED_MEMORY=unlimited

/etc/elasticsearch/elasticsearch.yml :

bootstrap.mlockall: true

4
이거 좋아 보인다. 또한 ES_HEAP_SIZE가 무엇인지 결정하는 방법에 대해 다음과 같은 조언이 있습니다. 경험상 ElasticSearch 힙이 머신에서 사용 가능한 메모리의 약 50 %를 가져야한다는 것입니다. ElasticSearch는 시스템 캐시를 많이 사용하므로 충분한 메모리를 남겨 두어야합니다. (from asquera.de/opensource/2012/11/25/… )
Tom

17
CentOS에서 언급 한 구성이 /etc/default`/ etc / sysconfig ' 아래에 있습니다
Nishant

5
CentOS /etc/sysconfig/elasticsearch에서는 이러한 변경을 수행하기에 적절한 장소입니다. RPM은이 파일의 기본 버전도 제공합니다.
slm

5
Elasticsearch 5에는 더 이상 적용되지 않습니다.이 답변 이 필요합니다. . .
tirdadc

2
이것은 좋아 보이지만, 특히 elasticsearch 사용자를 위해 제한을 /etc/security/limits.d/elasticsearch.conf
두었

26

Centos 7 또는 SystemD를 실행하는 다른 시스템에서이 작업을 수행하려는 경우 다음에서 변경하십시오.

/etc/sysconfig/elasticsearch 

ES_HEAP_SIZE 줄의 주석 처리를 제거하고 값을 설정합니다. 예 :

# Heap Size (defaults to 256m min, 1g max)
ES_HEAP_SIZE=16g

(1g max에 대한 설명은 무시하십시오. 이것이 기본값입니다)


추가해야합니다. CentOS 7의 ES 1.7에서 위의 접근 방식을 시도했지만 효과가 없었습니다.
Jonesome Reinstate Monica

1
@Jonesome은 내가 무엇을 제안 할 수 있는지 잘 모르겠습니다. CentOS 7의 ES RPM 패키지에서 ES 1.7.1을 실행 중이며이 파일이있는 경로이며 ES_HEAP_SIZE를 변경하면 의도 한대로 작동합니다.

9

지침 ubuntu 14.04:

sudo vim /etc/init.d/elasticsearch

세트

ES_HEAP_SIZE=512m

다음에서 :

sudo vim /etc/elasticsearch/elasticsearch.yml

세트:

bootstrap.memory_lock: true

자세한 내용은 파일에 주석이 있습니다.


9

제 경우에는 이전 답변이 충분하지 않았습니다. 아마도 제가 데비안 8을 사용하고 있었기 때문에 이전 배포판을 참조했기 때문일 것입니다.

데비안 8 서비스 스크립트가 정상적으로에서 위치 수정 /usr/lib/systemd/system/elasticsearch.service및 추가 Environment=ES_HEAP_SIZE=8G 단지 다른 "환경 = *"라인 아래에.

이제 서비스 스크립트를 다시로드하고 서비스 systemctl daemon-reload를 다시 시작하십시오. 작업이 완료되어야합니다!


1
고마워, 당신은 내 하루를 저장합니다! 예,이 데비안 8에 대한 올바른 절차
faster2b

이것을 구성 할 다른 장소가 없지만 파일을 변경할 수 /usr/있습니까?
마틴 슈뢰더

6

https://github.com/elasticsearch/elasticsearch-servicewrapper에 있는 Elasticsearch의 Github 저장소에서 제공되는 서비스 래퍼를 사용하는 경우 elasticsearch-servicewrapper / service / elasticsearch.conf의 conf 파일이 메모리 설정을 제어합니다. elasticsearch.conf 상단에 매개 변수가 있습니다.

set.default.ES_HEAP_SIZE=1024

Elasticsearch의 할당 된 메모리를 줄이려면이 매개 변수를 "set.default.ES_HEAP_SIZE = 512"라고 말하면됩니다.

elasticsearch-wrapper를 사용하는 경우 elasticsearch.conf에 제공된 ES_HEAP_SIZE가 다른 모든 설정을 덮어 씁니다. 문서에서 힙 메모리를 elasticsearch.yml에서 설정할 수있는 것처럼 보였기 때문에이 작업을 수행하는 데 약간의 시간이 걸렸습니다.

서비스 래퍼 설정이 James의 예에서와 같이 / etc / default / elasticsearch와 같이 다른 위치에 설정되어 있으면 ES_HEAP_SIZE를 설정하십시오.


2
서비스가 전혀 없다면 어떨까요? (즉, 바로 실행 빈 / elasticsearch -d)
헨리 치우


@HenleyChiu는 실행하기 전에 ES_HEAP_SIZE 환경 변수를 설정합니다. 즉export ES_HEAP_SIZE=1G; bin/elasticsearch -d
Andrey Regentov

ES 1.7.x 주식 elasticsearch.conf (CentOS의 rpm에 의해 설치된 것)에는 set.default가 전혀 없습니다. 이 접근 방식이 ES 1.7에서 작동합니까?
Jonesome Reinstate Monica 2005

위의 답변은 오해의 소지가 있습니다. / etc / sysconfig / elasticsearch에서 ES_HEAP_SIZE 설정
Jonesome Reinstate Monica

6

제공된대로 RPM / DEB 패키지를 사용하여 ES를 설치 한 경우 (있는 것처럼) init 스크립트 ( /etc/init.d/elasticsearch on RHEL/CentOS)를 편집하여이를 조정할 수 있습니다 . 파일을 보면 다음과 같은 블록이 표시됩니다.

export ES_HEAP_SIZE
export ES_HEAP_NEWSIZE
export ES_DIRECT_SIZE
export ES_JAVA_OPTS
export JAVA_HOME

크기를 조정하려면 ES_HEAP_SIZE선을 다음과 같이 변경하십시오 .

export ES_HEAP_SIZE=xM/xG

(여기서 x는 할당 할 RAM의 MB / GB 수)

예:

export ES_HEAP_SIZE=1G

1GB를 할당합니다.

스크립트를 편집 한 후 저장하고 종료 한 다음 서비스를 다시 시작하십시오. 다음을 실행하여 올바르게 설정되었는지 확인할 수 있습니다.

ps aux | grep elasticsearch

다음을 리턴하는 Java 프로세스에서 -Xms 및 -Xmx 플래그를 확인합니다.

/usr/bin/java -Xms1G -Xmx1G

도움이 되었기를 바랍니다 :)


1
이런 식으로하지 마십시오. 이것은 이러한 유형의 변경을 수행하기에 좋은 곳이 아닙니다. 이것은 거대한 해킹입니다! 작동 할 수도 있지만 ES가 업데이트 될 때마다 잠재적으로 휴지통으로 이동합니다.
slm

1
추가해야합니다. CentOS 7의 ES 1.7에서 위의 접근 방식을 시도했지만 효과가 없었습니다.
Jonesome Reinstate Monica 2015

3
  • Elasticsearch는 Xms (최소 힙 크기) 및 Xmx (최대 힙 크기) 설정을 통해 jvm.options에 지정된 전체 힙을 할당합니다.
    • -Xmx12g
    • -Xmx12g
  • 최소 힙 크기 (Xms)와 최대 힙 크기 (Xmx)를 서로 동일하게 설정합니다.
  • Xmx를 JVM이 압축 된 객체 포인터 (압축 된 oops)에 사용하는 컷오프 이상으로 설정하지 마십시오. 정확한 컷오프는 다양하지만 거의 32GB입니다.

  • 환경 변수를 통해 힙 크기를 설정할 수도 있습니다.

    • ES_JAVA_OPTS = "-Xms2g -Xmx2g"./bin/elasticsearch
    • ES_JAVA_OPTS = "-Xms4000m -Xmx4000m"./bin/elasticsearch

또한 물리적 RAM의 50 % 이하
Achi Even-dar

안녕하세요이 .Variable 이름은 ES_JAVA_OPTS이고 값은 "-Xms2g -Xmx2g"입니다 ./bin/elasticsearch like
Manikandan

또한 내가 확인하는 방법, 힙 크기가 올바르게 업데이트 됨
Manikandan

2

elasticsearch 경로 홈 디렉토리 즉, 일반적으로 /usr/share/elasticsearch구성 파일이 bin/elasticsearch.in.sh있습니다. 편집 매개 변수 ES_MIN_MEM, ES_MAX_MEM변화에이 파일에 -Xms2g, -Xmx4g각각. 그리고이 구성 변경 후 노드를 다시 시작했는지 확인하십시오.



1

elasticsearch 2.x에서 :

vi /etc/sysconfig/elasticsearch 

코드 블록으로 이동

# Heap size defaults to 256m min, 1g max
# Set ES_HEAP_SIZE to 50% of available RAM, but no more than 31g
#ES_HEAP_SIZE=2g

다음과 같이 마지막 줄의 주석 처리를 제거하십시오.

ES_HEAP_SIZE=2g
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.