居然是你

es每次get都把内存吃爆了。。。

Elasticsearch | 作者 huigy | 发布于2018年12月08日 | 阅读数:4223

一个索引有2个字段:
_id自定义36位uuid
字段fdata数据类型binary,大小50k~2m,只存储不索引
字段flag数据类型byte

单机运行,索引文件80g,分片设置4,内存64G,启动设置分配给es的最大内存为20G。
现在使用get /index/type/id。轮训获取数据,内存马上就爆了,_cache/clear清空缓存都没用,只有关闭再打开索引内存才会释放。开始以为是查询缓存,我在setting中吧request–cache-false一样不行,甚至我get的时候用_source把fdata字段排除也一样不行。。。
已邀请:

medcl - 今晚打老虎。

赞同来自:

单线程么获取?es内存给了多少?monitoring看看监控信息

huigy

赞同来自:

开了20并发,内存给了32G,按理说binary是不查询,不缓存的并且我获取的时候还过滤了此字段,内存上去了就一直在占用,我怀疑是不是Lucene吃的内存!...

rochy - rochy_he

赞同来自:

要看一下 ES 单独占用的内存大小;Lucene 占用的会根据系统可用内存进行调节;
对于 binary 字段,推荐下面的 mapping;此外考虑把 ES 的内存设置为 31G 
"mapping": {
"type": "binary",
"doc_values": "false",
"norms": "false",
"fielddata": "false",
"store": "false"
}
 

 

huigy

赞同来自:

binary官方文档说默认doc_values和store都是false
  "mappings": {
    "bfile": {
      "properties": {
        "rd": {
          "type": "integer"
        },
        "data": {
          "type": "binary"
        },
        "iD": {
          "type": "keyword"
        }
      }
    }
  },
总之就是一直Get后内存爆了,只要关闭索引再重启内存就降下去了

Sune - 90后IT

赞同来自:

看一下我这个问题跟你的这个一样不,也是遇到性能问题,https://elasticsearch.cn/question/6511

easyice - 张超

赞同来自:

爆掉之前,搜索请求有没有超时?20并发,有没有等待上一个请求收到回复的时候才发起下一个

huigy

赞同来自:

请求很慢,甚至超时。关键是JVM才用了2G(我分配的32G),就内存被吃光了。

要回复问题请先登录注册