Cara mengubah ukuran memori maks Elasticsearch


99

Saya memiliki server Apache dengan konfigurasi default Elasticsearch dan semuanya bekerja dengan sempurna, kecuali konfigurasi default memiliki ukuran maksimal 1GB.

Saya tidak memiliki sejumlah besar dokumen untuk disimpan di Elasticsearch, jadi saya ingin mengurangi memori.

Saya telah melihat bahwa saya harus mengubah -Xmxparameter dalam konfigurasi Java, tetapi saya tidak tahu caranya.

Saya telah melihat saya dapat melakukan ini:

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

Tetapi ketika saya harus memulai ulang Elasticsearch, ini akan hilang.

Apakah mungkin untuk mengubah penggunaan memori maksimal saat Elasticsearch diinstal sebagai layanan?


Sistem operasi dan versinya apa? Versi elasticsearch? Bagaimana Anda menginstal Elasticsearch?
James Addison

1
Anda mungkin ingin menurunkan jumlah replika dan shard karena tidak ada keuntungan dari memilikinya pada penyiapan 1 node, tambahkan ini ke /etc/elasticsearch/elasticsearch.yaml: index.number_of_shards: 1 index.number_of_replicas: 0 Dengan cara ini Anda menghemat memori dan cpu dengan tidak melakukan pekerjaan yang tidak perlu .
neo112

Jawaban:


127

Di ElasticSearch> = 5 , dokumentasi telah berubah , yang berarti tidak ada jawaban di atas yang berhasil untuk saya.

Saya mencoba mengubah ES_HEAP_SIZEmasuk /etc/default/elasticsearchdan masuk etc/init.d/elasticsearch, tetapi ketika saya menjalankan ps aux | grep elasticsearchhasilnya masih menunjukkan:

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

Saya harus melakukan perubahan ini dalam:

/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
Dan untuk Elasticsearch 5.2 di Mac OS 10.12 saya menemukan file ini di/usr/local/opt/elasticsearch/libexec/config/jvm.options
victorpolko

1
Saya dapat mengonfirmasi ini berfungsi untuk instance aws ami (diinstal dengan RPM), tetapi set pertama MAX_LOCKED_MEMORY = tidak terbatas di / etc / sysconfig / elasticsearch dan bootstrap.memory_lock: true di /etc/elasticsearch/elasticsearch.yml
mork

2
Ini tidak berfungsi di Windows - jawaban yang benar ada di sini: stackoverflow.com/questions/28798845/…
cbp

4
Untuk penginstalan homebrew, file ada di sini:/usr/local/etc/elasticsearch/jvm.options
Milovan Zogovic

117

Diperbarui pada 24 Nov 2016 : Elasticsearch 5 tampaknya telah mengubah cara untuk mengkonfigurasi JVM. Lihat jawaban ini di sini . Jawaban di bawah ini masih berlaku untuk versi <5.

tirdadc, terima kasih telah menunjukkan hal ini dalam komentar Anda di bawah.


Saya memiliki halaman pastebin yang saya bagikan dengan orang lain ketika bertanya-tanya tentang memori dan ES. Ini bekerja dengan baik untuk saya: http://pastebin.com/mNUGQCLY . Saya juga akan menempelkan konten di sini:

Referensi:

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

Edit file berikut untuk mengubah memori dan batas nomor file. Instruksi ini mengasumsikan Ubuntu 10.04, dapat berfungsi pada versi yang lebih baru dan distribusi / OS lain. ( Sunting : Ini juga berfungsi untuk Ubuntu 14.04.)

/etc/security/limits.conf :

elasticsearch - nofile 65535
elasticsearch - memlock unlimited

/ etc / default / elasticsearch (di 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
Ini terlihat bagus. Saya juga memiliki saran berikut tentang menentukan apa yang seharusnya ES_HEAP_SIZE: Aturan praktisnya adalah bahwa heap ElasticSearch harus memiliki sekitar 50% dari memori yang tersedia di mesin. ElasticSearch banyak menggunakan cache sistem, jadi Anda harus menyisakan cukup memori untuk cache tersebut. (dari asquera.de/opensource/2012/11/25/… )
Tom

17
Di CentOS, saya melihat konfigurasi yang Anda sebutkan di bawah /etc/defaultberada di bawah `/ etc / sysconfig '
Nishant

5
Di CentOS /etc/sysconfig/elasticsearchadalah tempat yang tepat untuk melakukan perubahan ini. RPM bahkan menyediakan versi default dari file ini di sana juga.
slm

5
Ini tidak lagi berlaku untuk Elasticsearch 5, Anda memerlukan jawaban ini .
tirdadc

2
Ini terlihat bagus, tetapi saya menetapkan batasan saya secara khusus untuk pengguna /etc/security/limits.d/elasticsearch.conf
elasticsearch

26

Bagi siapa pun yang ingin melakukan ini di Centos 7 atau dengan sistem lain yang menjalankan SystemD, Anda dapat mengubahnya

/etc/sysconfig/elasticsearch 

Batalkan komentar pada baris ES_HEAP_SIZE, dan tetapkan nilai, misalnya:

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

(Abaikan komentar tentang maks 1g - itu default)


Saya harus menambahkan: Saya mencoba pendekatan di atas pada ES 1.7 di CentOS 7, dan itu tidak berpengaruh
Jonesome Reinstate Monica

1
@Jonesome tidak yakin apa yang dapat saya sarankan - Saya menjalankan ES 1.7.1 dari Paket ES RPM di CentOS 7 dan itulah jalur tempat file ini ada, dan mengubah ES_HEAP_SIZE berfungsi sebagaimana mestinya.

9

Instruksi untuk ubuntu 14.04:

sudo vim /etc/init.d/elasticsearch

Set

ES_HEAP_SIZE=512m

lalu masuk:

sudo vim /etc/elasticsearch/elasticsearch.yml

Set:

bootstrap.memory_lock: true

Ada komentar di file untuk info lebih lanjut


9

Jawaban sebelumnya tidak cukup dalam kasus saya, mungkin karena saya menggunakan Debian 8, sementara mereka dirujuk ke distribusi sebelumnya.

Di Debian 8, ubah skrip layanan yang biasanya ditempatkan /usr/lib/systemd/system/elasticsearch.service, dan tambahkan Environment=ES_HEAP_SIZE=8G tepat di bawah baris "Environment = *" lainnya.

Sekarang muat ulang skrip layanan dengan systemctl daemon-reloaddan mulai ulang layanan. Pekerjaan harus selesai!


1
terima kasih, kamu menyelamatkan hariku! ya, ini adalah prosedur yang benar untuk Debian 8
fast2b

Apakah tidak ada tempat lain untuk mengkonfigurasi ini selain untuk mengubah file /usr/?
Martin Schröder

6

Jika Anda menggunakan pembungkus layanan yang disediakan di Github repository Elasticsearch ini, ditemukan di https://github.com/elasticsearch/elasticsearch-servicewrapper , maka file conf di elasticsearch-servicewrapper / layanan / elasticsearch.conf pengaturan kontrol memori. Di bagian atas elasticsearch.conf adalah parameter:

set.default.ES_HEAP_SIZE=1024

Kurangi saja parameter ini, katakan ke "set.default.ES_HEAP_SIZE = 512", untuk mengurangi memori yang dialokasikan Elasticsearch.

Perhatikan bahwa jika Anda menggunakan elasticsearch-wrapper, ES_HEAP_SIZE yang disediakan di elasticsearch.conf MENGATASI SEMUA SETELAN LAINNYA. Ini membuat saya sedikit mencari tahu, karena dari dokumentasinya, tampaknya memori heap dapat disetel dari elasticsearch.yml.

Jika setelan pembungkus layanan Anda disetel di tempat lain, seperti di / etc / default / elasticsearch seperti dalam contoh James, setel ES_HEAP_SIZE di sana.


2
bagaimana jika Anda tidak memiliki layanan sama sekali? (yaitu, jalankan bin / elasticsearch -d)
Henley Chiu


@HenleyChiu lalu setel variabel lingkungan ES_HEAP_SIZE sebelum menjalankannya. yaituexport ES_HEAP_SIZE=1G; bin/elasticsearch -d
Andrey Regentov

Dalam elasticsearch.conf saham ES 1.7.x (yang diinstal oleh rpm di CentOS), tidak ada set.default sama sekali. Apakah pendekatan ini berhasil pada ES 1.7?
Jonesome Reinstate Monica

Jawaban di atas menyesatkan. Setel ES_HEAP_SIZE di / etc / sysconfig /
elasticsearch

6

Jika Anda menginstal ES menggunakan paket RPM / DEB yang disediakan (seperti yang Anda lihat), Anda dapat menyesuaikannya dengan mengedit skrip init ( /etc/init.d/elasticsearch on RHEL/CentOS). Jika Anda melihat file tersebut, Anda akan melihat blok dengan berikut ini:

export ES_HEAP_SIZE
export ES_HEAP_NEWSIZE
export ES_DIRECT_SIZE
export ES_JAVA_OPTS
export JAVA_HOME

Untuk menyesuaikan ukuran, cukup ubah ES_HEAP_SIZEgaris menjadi berikut:

export ES_HEAP_SIZE=xM/xG

(di mana x adalah jumlah MB / GB RAM yang ingin Anda alokasikan)

Contoh:

export ES_HEAP_SIZE=1G

Akan mengalokasikan 1GB.

Setelah Anda mengedit skrip, simpan dan keluar, lalu mulai ulang layanan. Anda dapat memeriksa apakah sudah disetel dengan benar dengan menjalankan yang berikut ini:

ps aux | grep elasticsearch

Dan memeriksa tanda -Xms dan -Xmx dalam proses java yang mengembalikan:

/usr/bin/java -Xms1G -Xmx1G

Semoga ini membantu :)


1
Jangan lakukan dengan cara ini. Ini bukan tempat yang baik untuk membuat perubahan seperti ini. Ini adalah peretasan raksasa! Mungkin berhasil, tetapi berpotensi menjadi sampah setiap kali ES diperbarui.
slm

1
Saya harus menambahkan: Saya mencoba pendekatan di atas pada ES 1.7 di CentOS 7, dan itu tidak berpengaruh.
Jonesome Reinstate Monica

3
  • Elasticsearch akan menetapkan seluruh heap yang ditentukan di jvm.options melalui pengaturan Xms (ukuran heap minimum) dan Xmx (ukuran heap maksimum).
    • -Xmx12g
    • -Xmx12g
  • Setel ukuran heap minimum (Xms) dan ukuran heap maksimum (Xmx) agar sama satu sama lain.
  • Jangan setel Xmx di atas batas yang digunakan JVM untuk penunjuk objek terkompresi (oops terkompresi), batas yang tepat bervariasi tetapi mendekati 32 GB.

  • Dimungkinkan juga untuk menyetel ukuran heap melalui variabel lingkungan

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

Juga tidak lebih dari 50% dari RAM fisik
Achi Even-dar

Hai Bagaimana saya menyetel variabel lingkungan seperti ini. Nama variabel adalah ES_JAVA_OPTS dan nilai: "-Xms2g -Xmx2g" ./bin/elasticsearch like
Manikandan

Juga bagaimana saya mengonfirmasi, ukuran tumpukan diperbarui dengan benar
Manikandan

2

Dalam elasticsearch path home dir /usr/share/elasticsearch, biasanya , Ada file konfigurasi bin/elasticsearch.in.sh. Mengedit parameter ES_MIN_MEM, ES_MAX_MEMdi file ini untuk perubahan -Xms2g, -Xmx4gmasing-masing. Dan Harap pastikan Anda telah memulai ulang node setelah konfigurasi ini diubah.



1

Di elasticsearch 2.x:

vi /etc/sysconfig/elasticsearch 

Buka blok kode

# 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

Batalkan komentar pada baris terakhir seperti

ES_HEAP_SIZE=2g
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.