a) JVM內存設置不要超過機器的壹半內存,並且不超過32G。(./bin/elasticsearch -Xmx10g -Xms10g或者修改./bin/elasticsearch.in.sh文件:
** 壹般分配主機1/4-1/2的內存**
設置每個線程的堆棧大小, ES單線程承載的數據量比較大
JAVA_OPTS="$JAVA_OPTS -Xss128m"
b) 修改swapping參數,內存不夠用時才進行swapping(vm.swappiness= 1)
c) 暫時不要修改GC方法
d)鎖定內存,不讓JVM寫入swapping,避免降低ES的 性能
bootstrap.mlockall: true
e)緩存類型設置為Soft Reference,只有當內存不夠時才會進行回收
index.cache.field.max_size: 50000 index.cache.field.expire: 10m index.cache.field.type: soft
4.權衡建索引的性能和檢索的時效性,修改以下參數。
5.倒排詞典的索引需要常駐內存,無法GC,需要監控data node上segment
memory增長趨勢。
定期對不再更新的索引做optimize (ES2.0以後更改為force merge api)。這Optimze的實質是對segment file強制做合並,可以節省大量的segment memory
6.根據機器數,磁盤數,索引大小等硬件環境,根據測試結果,設置最優的分片數和備份數,單個分片最好不超過10GB,定期刪除不用的索引,做好冷數據的遷移。
7.保守配置內存限制參數,盡量使用doc value存儲以減少內存消耗,查詢時限制size、from參數。
8.如果不使用_all字段最好關閉這個屬性,否則在創建索引和增大索引大小的時候會使用額外更多的CPU,如果妳不受限CPU計算能力可以選擇壓縮文檔的_source。這實際上就是整行日誌,所以開啟壓縮可以減小索引大小。
9.避免返回大量結果集的搜索與聚合。缺失需要大量拉取數據可以采用scan & scroll api來實現。
10.熟悉各類緩存作用,如field cache, filter cache, indexing cache, bulk queue等等,要設置合理的大小,並且要應該根據最壞的情況來看heap是否夠用。
11.必須結合實際應用場景,並對集群使用情況做持續的監控。