Logstash: ускоряем запуск в виртуальной среде

linux

При настройке связки ELK (Elasticsearch, Logstash, Kibana) в docker-контейнере, который в свою очередь запущен из VDS-сервера (kvm), один из компонентов (logstash) очень долго стартовал. Запуски были в среднем 5-7 минут. Несколько раз собирался образ docker-контейнера, были внимательно прочитаны конфигурационные файлы logstash'a, была увеличена мощность VDS-сервера. Но это так, ни к чему и не приводило. Но Google "не оставил в беде", и было найдено решение, о котором ниже.

Библиотека, используемая для генерации случайных чисел в виртуальной машине Java использует /dev/random по умолчанию для платформ UNIX. Это может блокировать процессы, которые использует вычисление случайных чисел, потому что в некоторых операционных системах /dev/random ждет определенное количество пулов энтропии, сгенерированных на хост-машине (в docker-контейнере пулы берутся из хост-машины) перед возвратом результата. Несмотря на это, /dev/random является более безопасным, чем /dev/urandom. Об этом мифе и о других можно почитать тут: http://www.2uo.de/myths-about-urandom/

Как перейти на /dev/urandom в JVM?

В файле $JAVA_HOME/jre/lib/security/java.security, необходимо найти такую строчку:

securerandom.source=file:/dev/random

и заменить на такую

securerandom.source=file:/dev/urandom

После этого виртуальная машина Java будет гораздо быстрее получать теперь уже псевдослучайные числа.

 

Примечание.
Проверять текущее количество пулов энтропии в Linux-системе следующей командой:

cat /proc/sys/kernel/random/entropy_avail

 

Так же есть пакет для Linux rng-tools (для debian), якобы ускоряющий получение пулов энтропии. Но для текущего окружения, рассмотренного в посте, он не привнёс скорости.

Ещё есть инструмент haveged (для debian), на случай если решение выше не помогло.

Комментарии