Поскольку этот вопрос все еще актуален, я хотел бы отметить, что если вы работаете на Java ‹ 8, то одна из причин, по которой вы можете получить очень медленное время запуска в Linux (и, возможно, в Solaris), заключается в том, что Oracle JVM на этих У платформ есть ошибка, связанная с тем, где они получают свои случайные числа.
Даже если ему будет предложено получить случайные числа из /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 секунд — это самое приятное время для глотка кофе, поэтому вы избегаете неловкой середины вашего теста, заканчивающегося до того, как ваш глоток будет завершен. Б^)
Простой псевдоним может быть полезной быстрой победой:
alias logstash-configtest="/opt/logstash/vendor/jruby/bin/jruby --dev /opt/logstash/lib/bootstrap/environment.rb logstash/runner.rb agent --configtest"
Я считаю, что вы также можете запустить logstash с флагом USE_RUBY=1, чтобы использовать «ruby» вместо jruby от поставщика — вы бы не сделали этого для обычного запуска logstash, но это может быть полезно для --configtest, если вы хотите используйте его часто. - вам действительно нужно убедиться, что у вас есть все различные модули Ruby, и тогда у вас будет перекос версий между вашим родным ruby и jruby от поставщика ... Но, возможно, любитель Ruby может взять эту идею и использовать ее.
person
Cameron Kerr
schedule
22.09.2016