当ElasticeSearch的索引变慢时,所采取的应对措施
参考了这个链接:http://stackoverflow.com/questions/33952089/slow-index-speed-of-elasticsearch。
请参考此链接进行HEAP大小调整和禁用交换分区:https://www.elastic.co/guide/en/elasticsearch/guide/current/heap-sizing.html
1. 调查内存是否不足,是否频繁发生大量的交换操作。
$ free
total used free shared buffers cached
Mem: 2052380 1967252 85128 4 40220 250592
-/+ buffers/cache: 1676440 375940
Swap: 1048572 175832 872740
正在发生结构变化。
2. 调整堆的大小 duī de
将ES_HEAP_SIZE设置为物理内存的一半。
禁用3.swap。
参考这个进行设置。
vim /etc/sysconfig/elasticsearch
ES_HEAP_SIZE=1024m #物理メモリの半分
MAX_LOCKED_MEMORY=unlimited
重新启动elasticsearch。
按照官方网页上推荐的步骤进行操作。
# rebalance無効化、これでshardsの自動調整が止める
$ curl -XPUT 'http://localhost:9200/_cluster/settings' -d '{
"transient" : {
"cluster.routing.allocation.enable" : "none"
}
}'
# elasticsearch再起動
$ sudo service elasticsearch restart
# rebalance有効化
$ curl -XPUT 'http://localhost:9200/_cluster/settings' -d '{
"transient" : {
"cluster.routing.allocation.enable" : "all"
}
}'
# head pluginでshardsの調整できたことを確認
确认交换已被禁用(mlockall为true)。
http://localhost::9200/_nodes/process?pretty
"process": {
"refresh_interval_in_millis": 1000,
"id": 1232,
"max_file_descriptors": 65535,
"mlockall": true
}
在做作业时遇到困难了
为什么Elasticsearch启动失败呢?
- 查看了/var/log/elasticsearch/下的日志,但没有发现任何异常。怀疑是系统错误,于是查看了/var/log/messages日志。
Out of memory: Kill process 11560 (java) score 948 or sacrifice child
Killed process 11560 (java) total-vm:2949556kB, anon-rss:1929660kB, file-rss:13048kB
我查到的结果是,由于Elasticsearch使用了大量的内存,导致被OOM Killer杀死。
因为在具有2G物理内存的机器上将HEAP大小设置为1.5G,所以导致OOM Killer将其杀死。
建议将HEAP大小设置为推荐的物理内存的一半,即1G,这样就可以启动。