elasticsearch性能优化bootstrap.memory_lock: true
最近 006 百度云搜索引擎项目上线 遇到不少坑,也有一些心得分享下;http://yun.java1234.com/
006项目分词检索用的是 elasticsearch,开始部署没注意,基本都是默认配置,今天服务说硬盘频繁读,IOPS超高,
一般普通硬盘每秒大概90次,我这边都2千多次了。
所以大体分析了下,最终bootstrap.memory_lock: true要设置下;
这个配置,锁定物理内存地址,防止elasticsearch内存被交换出去,也就是避免es使用swap交换分区,频繁的交换,会导致IOPS变高;
设置好后,启动es会报错:
[1] bootstrap checks failed
[1]: memory locking requested for elasticsearch process but memory is not locked
这里需要额外设置下系统配置文件 需要切换到root用户:
1,修改/etc/security/limits.conf
最后添加:
* soft nofile 65536
* hard nofile 65536
* soft nproc 32000
* hard nproc 32000
* hard memlock unlimited
* soft memlock unlimited
2,修改/etc/systemd/system.conf
修改下面几项
DefaultLimitNOFILE=65536
DefaultLimitNPROC=32000
DefaultLimitMEMLOCK=infinity
3,最后 /bin/systemctl daemon-reload 执行下即可;
这里再说几点对于小系统应用es的优化和建议:
第一:建议用SSD,提高性能;
第二:新建索引的时候 分片设置成1,备份设置成0,能有效的降低IOPS;(分片多,备份多了,一直在进行磁盘操作,以及内存也紧张,弄不好,服务器配置低的话,直接炸了);
参考配置:
put http://localhost:9200/test2/ { "settings": { "number_of_shards": 1, "number_of_replicas": 0, "index.analysis.analyzer.default.type": "ik_max_word" }, "mappings": { "my": { "properties": { "id": { "type": "long" }, "name": { "type": "text" }, "content": { "type": "text" } } } } }