最近 006 百度云搜索引擎项目上线 遇到不少坑,也有一些心得分享下;

http://yun.java1234.com/


006项目分词检索用的是 elasticsearch,开始部署没注意,基本都是默认配置,今天服务说硬盘频繁读,IOPS超高;

elasticsearch性能优化bootstrap.memory_lock: true_java

一般普通硬盘每秒大概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"
       }
     }
   }
 }
}