Cách thay đổi kích thước bộ nhớ tối đa của Elasticsearch


99

Tôi có một máy chủ Apache với cấu hình mặc định của Elasticsearch và mọi thứ hoạt động hoàn hảo, ngoại trừ cấu hình mặc định có kích thước tối đa là 1GB.

Tôi không có một số lượng lớn tài liệu để lưu trữ trong Elasticsearch, vì vậy tôi muốn giảm bộ nhớ.

Tôi đã thấy rằng tôi phải thay đổi -Xmxtham số trong cấu hình Java, nhưng tôi không biết làm thế nào.

Tôi đã thấy tôi có thể thực hiện điều này:

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

Nhưng khi tôi phải khởi động lại Elasticsearch, điều này sẽ bị mất.

Có thể thay đổi mức sử dụng bộ nhớ tối đa khi Elasticsearch được cài đặt dưới dạng dịch vụ không?


Hệ điều hành và phiên bản nào? Phiên bản Elasticsearch? Bạn đã cài đặt Elasticsearch như thế nào?
James Addison

1
Bạn có thể muốn giảm số lượng bản sao và phân đoạn vì không có lợi ích gì khi có chúng trên thiết lập 1 nút, hãy thêm điều này vào /etc/elasticsearch/elasticsearch.yaml: index.number_of_shards: 1 index.number_of_replicas: 0 Bằng cách này bạn tiết kiệm trên bộ nhớ và cpu bằng cách không thực hiện công việc không cần thiết .
neo112

Câu trả lời:


127

Trong ElasticSearch> = 5 , tài liệu đã thay đổi , có nghĩa là không có câu trả lời nào ở trên phù hợp với tôi.

Tôi đã thử thay đổi ES_HEAP_SIZEtrong /etc/default/elasticsearchvà ngoài etc/init.d/elasticsearch, nhưng khi tôi chạy ps aux | grep elasticsearchđầu ra vẫn hiển thị:

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

Tôi đã phải thực hiện những thay đổi này trong:

/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
Và đối với Elasticsearch 5.2 trên Mac OS 10.12, tôi đã tìm thấy tệp này trong/usr/local/opt/elasticsearch/libexec/config/jvm.options
victorpolko

1
Tôi có thể xác nhận điều này hoạt động cho phiên bản aws ami (được cài đặt bằng RPM), nhưng trước tiên hãy đặt MAX_LOCKED_MEMORY = không giới hạn trong / etc / sysconfig /asticsearch và bootstrap.memory_lock: true in /etc/elasticsearch/elasticsearch.yml
mork

2
Đây không phải làm việc trong Windows - câu trả lời đúng là ở đây: stackoverflow.com/questions/28798845/...
CBP

3
Để cài đặt homebrew, tập tin là ở đây:/usr/local/etc/elasticsearch/jvm.options
Milovan Zogovic

117

Cập nhật vào ngày 24 tháng 11 năm 2016 : Elasticsearch 5 rõ ràng đã thay đổi cách định cấu hình JVM. Xem câu trả lời này tại đây . Câu trả lời dưới đây vẫn áp dụng cho các phiên bản <5.

tirdadc, cảm ơn bạn đã chỉ ra điều này trong bình luận của bạn bên dưới.


Tôi có một trang pastebin mà tôi chia sẻ với những người khác khi thắc mắc về bộ nhớ và ES. Nó hoạt động tốt đối với tôi: http://pastebin.com/mNUGQCLY . Tôi cũng sẽ dán nội dung ở đây:

Người giới thiệu:

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

Chỉnh sửa các tệp sau để sửa đổi giới hạn bộ nhớ và số tệp. Các hướng dẫn này giả sử Ubuntu 10.04, có thể hoạt động trên các phiên bản mới hơn và các bản phân phối / HĐH khác. ( Chỉnh sửa : Điều này cũng hoạt động cho Ubuntu 14.04.)

/etc/security/limits.conf :

elasticsearch - nofile 65535
elasticsearch - memlock unlimited

/ etc / default /asticsearch (trên CentOS / RH: / etc / sysconfig /asticsearch) :

ES_HEAP_SIZE=512m
MAX_OPEN_FILES=65535
MAX_LOCKED_MEMORY=unlimited

/etc/elasticsearch/elasticsearch.yml :

bootstrap.mlockall: true

4
Nhìn có vẻ tốt. Tôi cũng có lời khuyên sau về việc xác định ES_HEAP_SIZE nên là gì: Nguyên tắc chung là heap ElasticSearch phải có khoảng 50% bộ nhớ khả dụng trên máy. ElasticSearch sử dụng rất nhiều bộ nhớ đệm hệ thống, vì vậy bạn nên để lại đủ bộ nhớ cho chúng. (từ asquera.de/opensource/2012/11/25/… )
Tom

17
Trong CentOS, tôi thấy các cấu hình mà bạn đã đề cập dưới đây /etc/defaultnằm dưới `/ etc / sysconfig '
Nishant,

5
Trên CentOS /etc/sysconfig/elasticsearchlà nơi thích hợp để thực hiện những thay đổi này. RPM thậm chí còn cung cấp phiên bản mặc định của tệp này ở đó.
slm

5
Điều này không còn áp dụng cho Elasticsearch 5, bạn cần câu trả lời này .
tirdadc

2
Ngoại hình đẹp này, nhưng tôi đặt giới hạn của tôi ở đặc biệt dành cho người dùng elasticsearch trong/etc/security/limits.d/elasticsearch.conf
radtek

26

Đối với bất kỳ ai muốn thực hiện việc này trên Centos 7 hoặc với một hệ thống khác đang chạy SystemD, bạn thay đổi nó trong

/etc/sysconfig/elasticsearch 

Bỏ ghi chú dòng ES_HEAP_SIZE và đặt một giá trị, ví dụ:

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

(Bỏ qua nhận xét về tối đa 1g - đó là mặc định)


Tôi nên thêm: Tôi đã thử các cách tiếp cận nêu trên ES 1.7 trên CentOS 7, và nó không có hiệu lực thi hành
Jonesome Khôi phục Monica

1
@Jonesome không chắc những gì tôi có thể đề xuất - Tôi đang chạy ES 1.7.1 từ Gói ES RPM trên CentOS 7 và đó là đường dẫn mà tệp này tồn tại và việc thay đổi ES_HEAP_SIZE hoạt động như dự định.

9

Hướng dẫn cho ubuntu 14.04:

sudo vim /etc/init.d/elasticsearch

Bộ

ES_HEAP_SIZE=512m

sau đó trong:

sudo vim /etc/elasticsearch/elasticsearch.yml

Bộ:

bootstrap.memory_lock: true

Có nhận xét trong các tệp để biết thêm thông tin


9

Các câu trả lời trước đây là không đủ trong trường hợp của tôi, có thể vì tôi đang sử dụng Debian 8, trong khi chúng được tham chiếu đến một số bản phân phối trước đó.

Trên Debian 8, hãy sửa đổi tập lệnh dịch vụ thường đặt /usr/lib/systemd/system/elasticsearch.servicevà thêm Environment=ES_HEAP_SIZE=8G ngay bên dưới các dòng "Môi trường = *" khác.

Bây giờ tải lại tập lệnh dịch vụ với systemctl daemon-reloadvà khởi động lại dịch vụ. Công việc nên được hoàn thành!


1
cảm ơn, bạn đã tiết kiệm ngày của tôi! vâng, đây là thủ tục chính xác cho Debian 8
faster2b

Không có nơi nào khác để định cấu hình này ngoài việc thay đổi một tệp trong đó /usr/?
Martin Schröder,

6

Nếu bạn sử dụng trình bao bọc dịch vụ được cung cấp trong kho lưu trữ Github của Elasticsearch, được tìm thấy tại https://github.com/elasticsearch/elasticsearch-servicewrapper , thì tệp conf tại thunsearch-servicewrapper / service /asticsearch.conf sẽ kiểm soát cài đặt bộ nhớ. Ở trên cùng củaasticsearch.conf là một tham số:

set.default.ES_HEAP_SIZE=1024

Chỉ cần giảm tham số này, chẳng hạn như "set.default.ES_HEAP_SIZE = 512", để giảm bộ nhớ được phân bổ của Elasticsearch.

Lưu ý rằng nếu bạn sử dụng trình bao bọc thunsearch, ES_HEAP_SIZE được cung cấp trongasticsearch.conf KHÁC QUÁ TẤT CẢ CÁC CÀI ĐẶT KHÁC. Điều này khiến tôi mất một chút thời gian để tìm ra, vì từ tài liệu, có vẻ như bộ nhớ heap có thể được đặt từasticsearch.yml.

Nếu cài đặt trình bao bọc dịch vụ của bạn được đặt ở một nơi khác, chẳng hạn như tại / etc / default /asticsearch như trong ví dụ của James, thì hãy đặt ES_HEAP_SIZE ở đó.


2
điều gì sẽ xảy ra nếu bạn không có bất kỳ dịch vụ nào? (tức là chỉ cần chạy bin / elasticsearch -d)
Henley Chiu


@HenleyChiu sau đó chỉ cần đặt biến môi trường ES_HEAP_SIZE trước khi chạy nó. tức làexport ES_HEAP_SIZE=1G; bin/elasticsearch -d
Andrey Regentov

Trong ES 1.7.x stockasticsearch.conf (cái được cài đặt bởi rpm trên CentOS), không có set.default nào cả. Phương pháp này có hoạt động trên ES 1.7 không?
Jonesome Khôi phục Monica

Câu trả lời trên là sai lệch. Đặt ES_HEAP_SIZE trong / etc / sysconfig /
asticsearch

6

Nếu bạn đã cài đặt ES bằng cách sử dụng các gói RPM / DEB như được cung cấp (như bạn có), bạn có thể điều chỉnh điều này bằng cách chỉnh sửa tập lệnh init ( /etc/init.d/elasticsearch on RHEL/CentOS). Nếu bạn nhìn vào tệp, bạn sẽ thấy một khối có những thứ sau:

export ES_HEAP_SIZE
export ES_HEAP_NEWSIZE
export ES_DIRECT_SIZE
export ES_JAVA_OPTS
export JAVA_HOME

Để điều chỉnh kích thước, chỉ cần thay đổi ES_HEAP_SIZEdòng như sau:

export ES_HEAP_SIZE=xM/xG

(trong đó x là số MB / GB RAM mà bạn muốn phân bổ)

Thí dụ:

export ES_HEAP_SIZE=1G

Sẽ phân bổ 1GB.

Khi bạn đã chỉnh sửa tập lệnh, hãy lưu và thoát, sau đó khởi động lại dịch vụ. Bạn có thể kiểm tra xem nó đã được đặt đúng chưa bằng cách chạy như sau:

ps aux | grep elasticsearch

Và kiểm tra các cờ -Xms và -Xmx trong quy trình java trả về:

/usr/bin/java -Xms1G -Xmx1G

Hi vọng điêu nay co ich :)


1
Đừng làm theo cách này. Đây không phải là một nơi tốt để thực hiện các loại thay đổi này. Đây là một vụ hack khổng lồ! Có thể hoạt động, nhưng nó sẽ có khả năng bị chuyển vào thùng rác bất cứ khi nào ES được cập nhật.
slm

1
Tôi nên nói thêm: Tôi đã thử cách tiếp cận ở trên trên ES 1.7 trên CentOS 7 và nó không có tác dụng.
Jonesome Reinstate Monica

3
  • Elasticsearch sẽ chỉ định toàn bộ heap được chỉ định trong jvm.options thông qua cài đặt Xms (kích thước heap tối thiểu) và Xmx (kích thước heap tối đa).
    • -Xmx12g
    • -Xmx12g
  • Đặt kích thước heap tối thiểu (Xms) và kích thước heap tối đa (Xmx) bằng nhau.
  • Không đặt Xmx cao hơn mức giới hạn mà JVM sử dụng cho con trỏ đối tượng nén (oops được nén), mức giới hạn chính xác khác nhau nhưng gần 32 GB.

  • Cũng có thể đặt kích thước heap thông qua một biến môi trường

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

Ngoài ra, không quá 50% RAM vật lý
Achi Even-dar

Xin chào Cách tôi đặt biến môi trường như thế này. Tên biến là ES_JAVA_OPTS và giá trị: "-Xms2g -Xmx2g" ./bin/elasticsearch like
Manikandan

Cũng như cách tôi xác nhận, kích thước đống được cập nhật chính xác
Manikandan

2

Trong dir đường dẫn đàn hồi, tức là thông thường /usr/share/elasticsearch, Có một tệp cấu hình bin/elasticsearch.in.sh. Chỉnh sửa tham số ES_MIN_MEM, ES_MAX_MEMtrong tệp này để thay đổi -Xms2g, -Xmx4gtương ứng. Và hãy đảm bảo rằng bạn đã khởi động lại nút sau khi thay đổi cấu hình này.


1

Nếu bạn sử dụng máy chủ windows, bạn có thể thay đổi Biến môi trường, khởi động lại máy chủ để áp dụng Giá trị môi trường mới và khởi động Dịch vụ đàn hồi. Chi tiết hơn trong Cài đặt Elastic trong Windows Server


1

Trongasticsearch 2.x:

vi /etc/sysconfig/elasticsearch 

Chuyển đến khối mã

# 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

Bỏ ghi chú dòng cuối cùng như

ES_HEAP_SIZE=2g
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.