❶ elasticsearch 使用優化
1、jvm內存最好為系統的一半,型搭困另一半交給luence使用
2、增加reflush刷新間隔(10s,減少段合並帶來的性能影響)
3、增大集群間互相發現、心跳的時間間隔(防止腦裂和誤操作導致的不可用)
4、每個分片的存儲量盡量和jvm內存分配的大小一致(保證搜索的數據都在內存中,對搜索延遲至關重要)
5、關閉枝高不必要的索引(只要索引開著,就會分配內存給這個索引)
6、提前建好template,設置好mapping(減少es在創建索引時的消耗,如果多了一個欄位,es也會自動按照第一次提交的數據格式設置mapping)
7、可以嘗試使用G1GC垃圾回收器(jvm內存大於8G時,G1GC的處理效率要高很多,只在client機器上使用過,未在data節點上使用過)
8、搜索條件盡可能的詳卜念細(越詳細,搜索的耗時越小)
### 配置文件:
#### elasticsearch.yml
```
cluster.name: {{ cluster_name }}
node.name: {{ ansible_nodename }}
node.master: {{ node_master }}
node.data: {{ node_data }}
path.data: /data/elasticsearch/
path.logs: /data0/log-data/elasticsearch/
network.host: {{ inventory_hostname }}
network.bind_host: {{ inventory_hostname }}
network.publish_host: {{ inventory_hostname }}
transport.tcp.port: 9300
http.port: 9200
discovery.zen.fd.ping_timeout: 120s
discovery.zen.fd.ping_interval: 30s
discovery.zen.ping.unicast.hosts: [{{ hosts }}]
discovery.zen.minimum_master_nodes: {{ min_master_nodes }}
http.cors.allow-origin: "/.*/"
http.cors.enabled: true
node.ingest: {{ node_ingest }}
```
#### jvm.option
```
-Xms{{ es_heap }}m
-Xmx{{ es_heap }}m
-XX:+UseConcMarkSweepGC
-XX:=75
-XX:+UseCMSInitiatingOccupancyOnly
-XX:+AlwaysPreTouch
-server
-Xss1m
-Djava.awt.headless=true
-Dfile.encoding=UTF-8
-Djna.nosys=true
-Djdk.io.permissionsUseCanonicalPath=true
-Dio.netty.noUnsafe=true
-Dio.netty.noKeySetOptimization=true
-Dio.netty.recycler.maxCapacityPerThread=0
-Dlog4j.shutdownHookEnabled=false
-Dlog4j2.disable.jmx=true
-Dlog4j.skipJansi=true
-XX:+HeapDumpOnOutOfMemoryError
```