【已解決】ERROR: bootstrap checks failed memory locking requested for elasticsearch process but memory is

官網說明:

elasticsearch官網建議生產環境須要設置bootstrap.memory_lock: truenode

官網的解釋 是:發生系統swapping的時候ES節點的性能會很是差,也會影響節點的穩定性。因此要不惜一切代價來避免swapping。swapping會致使Java GC的週期延遲從毫秒級惡化到分鐘,更嚴重的是會引發節點響應延遲甚至脫離集羣。linux

因此最好限制住elasticsearch佔用的內存狀況,可選少用swapdocker

錯誤內容:

開啓bootstrap.memory_lock: true後,在Elasticsearch集羣啓動的時候,會報以下錯誤bootstrap

ERROR: bootstrap checks failed memory locking requested for elasticsearch process but memory is not locked

我使用docker-compose佈署的時候,集羣一直在重啓失敗間循環!vim

解決方法:

方案1:

此方案適用於非systemd管理的linux發行版,centos 6及如下能夠僅經過這個方案解決centos

臨時解決方法:
ulimit -l unlimited
永久解決方法:

root權限編輯/etc/security/limits.confbash

$ sudo vim /etc/security/limits.conf

添加以下內容,保存退出服務器

* soft memlock unlimited
* hard memlock unlimited

這裏的*表明的是全部用戶名稱,能夠更換爲指定用戶名
另:這裏有個坑就是若是/etc/security/limits.d文件夾下的有配置文件,那麼會覆蓋剛纔修改的文件,因此請確保該目錄沒有其它文件,若有請聯繫運維人員確認刪除app

修改/etc/sysctl.conf運維

sudo echo "vm.swappiness=0" >> /etc/sysctl.conf

這個參數的做用是告訴Linux內核盡少的使用swap分區,不等於禁用swap,經過少使用swap來提升性能。
若是想當即生效而不是重啓以後讓sysctl.conf生效,請使用sysctl -p

從新登陸或重啓服務器方可生效

方案2:

適用於systemd管理的發行版,有文章提到centos 7須要使用此方案,本人使用debian 9.9.0 親測解決問題,推薦先完成上邊的方案後嘗試本方案
這裏仍是推薦使用上邊方法的第3步,盡少使用swap分區
在Centos7系統中,使用Systemd替代了以前的SysV。/etc/security/limits.conf文件的配置做用域縮小了。/etc/security/limits.conf的配置,只適用於經過PAM認證登陸用戶的資源限制,它對systemd的service的資源限制不生效。所以登陸用戶的限制,經過/etc/security/limits.conf與/etc/security/limits.d下的文件設置便可。

對於systemd service的資源設置,則需修改全局配置,全局配置文件放在/etc/systemd/system.conf和/etc/systemd/user.conf,同時也會加載兩個對應目錄中的全部.conf文件/etc/systemd/system.conf.d/.conf和/etc/systemd/user.conf.d/.conf。system.conf是系統實例使用的,user.conf是用戶實例使用的。

全局生效方式:
sudo vim /etc/systemd/system.conf

最下方添加

DefaultLimitNOFILE=65536
DefaultLimitNPROC=32000
DefaultLimitMEMLOCK=infinity

保存, 重啓系統

固然因爲我是使用的docker,而不是包管理器安裝的,給出的是全局的方案

局部生效方式:(針對包管理器安裝elasticsearch的形式)
sudo systemctl edit elasticsearch

此命令會在/etc/systemd/system下建立elasticsearch.service.d/override.conf文件

添加以下內容

[Service]
LimitMEMLOCK=infinity

保存,退出,執行以下命令生效

sudo systemctl daemon-reload

如未生效,請嘗試重啓系統

壓縮包版測試

針對使用tar.gz包,指定內存參考如圖

咱們按圖索驥使用命令ES_JAVA_OPTS="-Xms512m -Xmx512m" ./bin/elasticsearch

若是此時出現
[2019-06-20T07:01:36,305][WARN ][o.e.b.JNANatives         ] [node-1] Unable to lock JVM Memory: error=12, reason=Cannot allocate memory
[2019-06-20T07:01:36,340][WARN ][o.e.b.JNANatives         ] [node-1] This can result in part of the JVM being swapped out.
[2019-06-20T07:01:36,343][WARN ][o.e.b.JNANatives         ] [node-1] Increase RLIMIT_MEMLOCK, soft limit: 16777216, hard limit: 16777216
[2019-06-20T07:01:36,343][WARN ][o.e.b.JNANatives         ] [node-1] These can be adjusted by modifying /etc/security/limits.conf, for example:
        # allow user 'hellxz' mlockall
        hellxz soft memlock unlimited
        hellxz hard memlock unlimited
請再嘗試加上第一種方案,兩種方案同時使用

以上就是這些內容,但願能對讀者有所幫助

聲明,禁止布布扣、碼迷、馬開東、01海、colabug等網站複製轉發此文章,其餘請保留文章出處

相關文章
相關標籤/搜索