Elasticsearch調優篇 03 - Elasticsearch 系統層面最全優化


【申明】這里啟動 elasticsearch 用戶名為:elastic

1、設置啟動 elasticsearch 用戶所持有的文件句柄數

vim /etc/security/limits.conf
# 在文件末尾增加以下內容
elastic soft memlock unlimited
elastic hard memlock unlimited

2、修改系統配置文件 /etc/sysctl.conf

vm.max_map_count = 262144
vm.swappiness = 1
net.core.somaxconn = 2048
# 使用以下命令使得新增加內容生效
sysctl -p

 1. vm.max_map_count = 262144

Elasticsearch 默認采用 hybrid mmapfs / niofs 目錄來保存索引。這個 mmap 就是我們所說的內存映射,應用比較廣泛,主要作用就是減少用戶態與內核態數據之間的拷貝,具體可參考:redis17- MMAP內存映射 與 零拷貝sendFile。默認的操作系統 mmap 數限制為:65530,這個數值太小了會導致內存溢出的異常。 新版 elasticsearch 在啟動的時候要求最少為 262144, 所以需要更新 /etc/sysctl.conf 中的 vm.max_map_count = 262144

 2. vm.swappiness = 1

Linux系統上可用,確保設置 vm.swappiness = 1(默認是 60)。這減少了內核交換的傾向即盡可能 降低 OS 將 elasticsearch 進程 swap 出去,設置 1 表示當整個系統可用內存只剩 1% 的時候不得不將改進程 swap 出去了,否則 os 就要死了,這就代表着一般情況不會發生這樣的事情,但是極壞的情況下仍然允許在緊急條件下置換出去從而保證整個系統的穩定。

 3. net.core.somaxconn = 2048

net.core.somaxconn 定義了系統中每一個端口最大的監聽隊列的長度,這是個全局的參數,默認值為 128,限制了接收新 TCP 連接偵聽隊列的大小。對於一個經常處理新連接的高負載 web 服務環境來說,默認的 128 太小了。大多數環境這個值建議增加到 2048 或者更多。 服務進程會自己限制偵聽隊列的大小(例如 sendmail(8) 或者 Apache),常常在它們的配置文件中有設置隊列大小的選項。大的偵聽隊列對防止拒絕服務 DoS 攻擊也會有所幫助。

3、更大的堆內存

  你希望更大的堆內存。你可以考慮一台機器上創建兩個或者更多 ES 節點,而不要部署一個使用 32+GB 內存的節點。仍然要堅持 50% 原則,假設 你有個機器有 128G 內存,你可以創建兩個 node,使用 31G(正常 Linux x64 系統最大最優內存大小也不會是 32GB,一般都是 31 多,所以為了使得性能最優,建議設置為 31GB 堆內存大小) 內存。也就是說 62G 內存給ES的堆內存,剩下的 62G 給Lucene。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM