您的位置:首页 > 移动开发

ELK数据抽取工具logstash报错:Your application used more memory than the safety cap of 1G

2018-01-05 00:01 1006 查看

问题来源

  logstash在数据量少的情况下,是正常抽取数据的,但当多台服务器一起启动logstash去抽取大量数据的时候,logstash就会出现Your application used more memory than the safety cap of 1G的问题,进而抽取程序就停掉了;

问题说明

  从报错的提示来看,很明显就是内存溢出的问题(logstash的默认服务分配内存的1g),数据抽取缓存堆积太多,导致原本分配的堆内存空间不足,需要扩大服务的内存空间以解决内存溢出的问题;

解决方法

在logstash5.X版本以前,可以直接修改logstash的配置文件logstash.lib.sh,它的文件路径:/opt/logstash/bin;

修改内容:

LS_HEAP_SIZE=”${LS_HEAP_SIZE:=1g}”

将其中的1g修改成32g,扩大es处理服务空间,修改之后的文件如下:

LS_HEAP_SIZE=”${LS_HEAP_SIZE:=32g}”

在logstash5.X版本之后,修改的方式有所变动,需要修改es的配置文件,而不是logstash配置文件;

修改方式:

在es的bin目录下,找到elasticsearch启动文件,在头部新增命令语句:
4000
export ES_HEAP_SIZE=32g

说明:

ES_HEAP_SIZE的大小可根据生产环境的大小进行修改,一般不超过32g;

新问题出现

  当在elasticsearch设置了32g的分配内存之后,启动的时候发现又报错了,以下就是报错的内容:

  1. Error: encountered environment variables that are no longer supported

  2. Use jvm.options or ES_JAVA_OPTS to configure the JVM

  3. ES_HEAP_SIZE=32g: set -Xms32g and -Xmx16g in jvm.options or add “-Xms32g -Xmx32g” to ES_JAVA_OPTS

  解决方式:

  从报错的提示来看,jvm里面没有16g的配置,所以提供了两种方式去修改:

 1. 修改config目录下的jvm.options文件,修改配置:-Xms32g -Xmx32g

 2. 直接在elasticsearch启动文件里面添加配置:ES_JAVA_OPTS=”-Xms32g -Xmx32g”

 如果第一种修改方式不起作用,可选择第二种进行修改;

解决结果

  修改成功上面的配置之后,重新启动es,然后多台服务器一起去运行logstash导入数据的时候,再也没有出现那些奇葩的问题了,perfect,希望对有遇到这些问题的程序猿有所帮助~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐