logstash-1.4.1使用http方式的内存泄露问题


基本环境:
elasticsearch-1.1.2
logstash-1.4.1


为了方便配合spring的版本控制,elasticsearch的版本最高只能使用1.1.2,而对应的logstash则使用1.4.1版本。
但程序运行久了之后,logstash在收集日志记录时会出现内存泄露,后来查了一下原因,
参考链接: http://it.taocms.org/02/6952.htm

logstash-1.4.2 依赖的 ftw-0.0.39,有内存泄露问题。logstash 开发者在去年十一月升级了 ftw-0.0.40 解决这个问题,
但是 logstash-1.4 那时候已经没有 release 计划了…… 差不多同时间,
LogStash::Outputs::ElasticSearch 更换了底层 HTTP 依赖库为性能跟 FTW 相近的 Manticore,并且在前些天随 1.5.0beta1 版本发布。
升级成 1.5.0beta1 后,测试运行几天,Elasticsearch 的写入数据量一直没有下降。可以认定问题解决。

logstash-1.4.1也是依赖ftw-0.0.39的,所以也是一样的问题。
现在问题来了,logstash-1.5以上的版本需要JDK1.8以上的,但服务器就一台,里面装了JDK1.7,正在跑一些工程,所以不可能为了logstash而把这台服务器的JDK环境换成1.8以上的,毕竟使用高版本的JDK,有太多的顾虑了,很可能升级之后就不稳定,原本的工程也跑不起来了。
所以我做了2个设想的解决方案:

  1. 装上JDK1.8,环境变量那里在已有JAVA_HOME的基础上再另外设置新的JAVA_HOME2,JAVA_HOME对应1.7,JAVA_HOME2对应1.8,然后ElasticSearch 使用1.5、logstash也使用1.5版本的。这里应该怎么设置ElasticSearch 和logstash的JDK使用JDK1.8而不是用JDK1.7呢?
  2. 服务器的JDK环境不变,就只使用JDK1.7。ElasticSearch 和logstash也使用原来的版本elasticsearch-1.1.2和logstash-1.4.1。然后修改logstash-1.4.1所依赖的ftw-0.0.39,把ftw-0.0.39升级到ftw-0.0.40。这里怎么单独把ftw-0.0.39升级到ftw-0.0.40呢?

请教各位大神,上面的方案是否可行呢?分别是怎么解决呢?或者还有什么其他更好的方法吗?

elasticsearch logstash

原厂轩辕王 10 years, 4 months ago

Your Answer