为什么logstash很长时间才能启动/加载?(Why does logstash take so

2019-08-02 10:44发布

编辑:我改变了标题,因为问题不是我最初以为。 事实是,logstash时间超过一分钟来启动,它可以被误解为“沉默” 更多 ...


我试图让logstash运行的,所以我是按照独立安装在官方网站上的指示: http://logstash.net/docs/1.1.4/tutorials/getting-started-simple

基本上,我得到了logstash-1.1.4-monolithic.jar文件,然后建立一个非常简单的配置文件:( example.conf

input {
  stdin { type => "stdin-type"  }
}
output {
  stdout { debug_format => "json" }
}

但是,当我运行logstash,无所不出来(我打字的标准输入随机文本,但没有得到回应):

# java -jar logstash-1.1.4-monolithic.jar agent -f example.conf
Test
toto
hey ??? Wakeup !!!
^C

(供参考:Java版本是正确的)

# java -version
java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) Client VM (build 20.1-b02, mixed mode, sharing)

请,可有人告诉我,我缺少的是什么?

Answer 1:

好吧,我独自找到。

一切都工作得很好。 这只是logstash是soooooo长期推出。 超过60秒,我(谦虚)服务器上! 再加上巨大的启动时间是启动时没有打印的事实...



Answer 2:

我开始使用大约一个星期前logstash。 真的被@jordansissel恨驱动开发的会谈诱惑。 花在#logstash IRC交谈有关的问题,包括你刚才提到的一个PPL最后的日子。

启动logstash-网(稀疏西纳特拉Web服务器)发生在我的Ubuntu 12.04 29(!)秒。

我相信logstash必须使用Java移开。 Logstash能够可靠地运行的应用程序红宝石等意义上的,并用较少(或没有)疼痛传递相同的值。

使用Java(JRuby中) puts "bla"在控制台需要7秒。

简短的回答是:Java是很好的杯子,而不是计算机。 如果你看到这样的“前提条件:Java的” - 准备浪费。



Answer 3:

我想你妄下结论,只是激活 - 调试日志,看看什么在+你甚至可以使用你的包来分析一下,看看到底是什么去自己去。



Answer 4:

因为这个问题仍然是相关的,我想指出的是,如果你在Java的<8上运行,再一个原因,你可能会在Linux上非常缓慢的开始时间(也许是的Solaris以及)是因为那些在Oracle JVM平台上有关于它在哪里gettings它的随机数的错误。

即使告知从/ dev / urandom的得到它的随机数,它不会(至少不完全是?)。 如果你把它从/dev/./urandom,这是相同的,但不匹配内部中断逻辑读取,那么你可能会发现,Java的启动更快(特别是在J2EE中间件环境)。

http://bugs.java.com/view_bug.do?bug_id=6521844

这就是说,即使是与Java 8,logstash --configtest仍超慢启动; 这可能是由于这样的事实:在服务器模式下的64位JVM会做很多工作,在启动优化(即使在那时,我怀疑JRuby是做了很多的Ruby相关的东西)。

JRuby的维基有一个关于其他启动性能改进(文件https://github.com/jruby/jruby/wiki/Improving-startup-time ),但不是很适用于越来越logstash快得多。 我能得到的启动时间“logstash --configtest”下调至与此约8秒钟:

[root@node-2 ~]# DEBUG=1 /opt/logstash/bin/logstash help
DEBUG: exec /opt/logstash/vendor/jruby/bin/jruby --1.9 -J-XX:+UseParNewGC -J-XX:+UseConcMarkSweepGC -J-Djava.awt.headless=true -J-XX:CMSInitiatingOccupancyFraction=75 -J-XX:+UseCMSInitiatingOccupancyOnly -J-XX:+HeapDumpOnOutOfMemoryError -J-Xmx1g -J-XX:HeapDumpPath=/opt/logstash/heapdump.hprof /opt/logstash/lib/bootstrap/environment.rb logstash/runner.rb help

就拿它执行的是命令,删除所有的java选项,并将其替换--dev

[root@node-2 ~]# time /opt/logstash/vendor/jruby/bin/jruby /opt/logstash/lib/bootstrap/environment.rb logstash/runner.rb agent --configtest --config /etc/logstash/logstash-submission.conf 
Configuration OK

real    0m13.367s
user    0m12.966s
sys 0m0.321s
[root@node-2 ~]# time /opt/logstash/vendor/jruby/bin/jruby --dev /opt/logstash/lib/bootstrap/environment.rb logstash/runner.rb agent --configtest --config /etc/logstash/logstash-submission.conf 
Configuration OK

real    0m6.954s
user    0m6.629s
sys 0m0.286s

7秒仍然不是很大,但是它比14左右。 7秒是围绕着甜蜜点了一口咖啡,这样避免了您的测试完成之前您的SIP完成的尴尬中。 乙^)

一个简单的别名可能是有用的速赢:

alias logstash-configtest="/opt/logstash/vendor/jruby/bin/jruby --dev /opt/logstash/lib/bootstrap/environment.rb logstash/runner.rb agent --configtest"

我相信你也可以使用USE_RUBY = 1标志使用“红宝石”,而不是运行logstash的vendored JRuby的 - 你会不会对正常运行logstash做到这一点,但如果你想它可能是有用--configtest经常使用它。 - 你需要确保你有所有不同的Ruby模块,然后你有你的本地Ruby和JRuby的vendored之间的版本歪斜......但也许一个Ruby爱好者可以采取这样的想法,并运行它。



文章来源: Why does logstash take so long to start/load?