elasticsearch默认配置的thread_pool参数已经能符合绝大多数情况了,但是在实际使用过程中,还是有许多调优空间的。这里提一下,我的ES版本为5.3.3。版本的不同,调整参数的方式也有所不一样。根据官方说明从5.X开始 thread_pool就变成node level了 不再支持通过cluster setting api动态调整了--以前用2.3.5版本的时候感觉通过api调整很方便,版本升级了后而是需要修改每一个es节点配置文件然后重启实例来生效。吐槽一下,这样的改动真的很不方便,有点挫,还不如以前那样呢。
默认的配置信息看这里 https://www.elastic.co/guide/en/elasticsearch/reference/5.3/modules-threadpool.html
实际运行的信息可以通过下面的api查看
XGET _nodes/stats/thread_pool?human&pretty
通常来说如果业务突然放大了,后端es消化数据的能力不足的话,就会有索引不及时的情况发生。如果在硬件性能条件固定的情况下,这时候就可以调大index 的queue_size解决问题。同理,如果搜索的比较多,则需要调大search的queue_size。两种的默认大小分别为200和1000,这个值在实际运用中还是偏小的。还有,如果有一些数据是通过bulk导入es的话,默认bulk的queue_size是200,视情况而定也可以调大。
在过去我使用es2.3.5的时候是可以通过cluster setting api 动态调整的
curl -XPUT http://XXX.XXX.XXX.XXX:9200/_cluster/settings -d '{ "transient": { "threadpool.index.queue_size": 4500 } }'
但是在5.X以后需要修改配置文件,再文件中添加
#注意 这里的thread_pool和上面的threadpool的区别,这是官方的改动= = thread_pool.index.queue_size: 4500
然后重启实例才能生效
Cloudhu 个人随笔|built by django|
沪ICP备16019452号-1