Быстрый генератор случайных чисел в Tomcat 7 - PullRequest
18 голосов
/ 26 сентября 2011

У меня проблема в том, что Tomcat 7 очень медленно запускается. Я нашел это в файле журнала:

INFO: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [12,367] milliseconds.

Безопасность важна, конечно, но не на моей машине для разработки. Я мог бы прекрасно жить со стандартным быстрым генератором случайных чисел. Так что мне не нужна эта смехотворно медленная реализация SecureRandom.

Вопрос: как его отключить? Выполняется поиск решения, но найдена только некоторая устаревшая информация об атрибуте randomClass, которая может быть установлена ​​на java.util.Random. Я также обнаружил, что этот атрибут, по-видимому, теперь называется secureRandomClass в Tomcat 7. Я попытался установить его на java.util.Random, но это не удалось, потому что Tomcat 7 преобразует объект в java.util.SecureRandom (И также задокументировано, что указанный класс должен расширять java.util.SecureRandom, поэтому вместо него больше нельзя использовать java.util.Random.)

Так, как я могу избавиться от этого ужасно медленного запуска генератора случайных чисел, чтобы моя разработка tomcat запускалась / перезапускалась как можно быстрее?

Ответы [ 6 ]

13 голосов
/ 09 сентября 2014

Согласно TomCat Wiki вы можете использовать неблокирующий источник энтропии:

"Есть способ настроить JRE для использования неблокирующего источника энтропии, установив следующее системное свойство: -Djava.security.egd=file:/dev/./urandom"

6 голосов
/ 19 августа 2016

Возможно, вам потребуется установить Haveged на вашем сервере.

Tomcat использует SecureRandom для создания безопасного идентификатора при запуске, а SecureRandom использует /dev / random или / dev / urandom для генерации случайного числа.

В некоторых безликих средах linux / dev / random пулы энтропии могут привести к низкому качествуслучайности и очень медленно реагируют на генерацию случайного числа.

Есть хорошая статья, объясняющая, как Haveged может решить эту проблему.

как настроить-дополнительная-энтропия-для-облачных серверов, использующая-haveged

2 голосов
/ 18 октября 2014

просто найдите securerandom.source=... из $JAVA_PATH/jre/lib/security/java.security файла и измените его на securerandom.source=file:/dev/./urandom

https://stackoverflow.com/a/26432537/450586

2 голосов
/ 26 сентября 2011

Вам, вероятно, нужно исправить патч Tomcat.

Хотя в качестве хака вы всегда можете попробовать расширить java.util.SecureRandom чем-то, что оборачивает стандартный экземпляр java.util.Random .......это, по крайней мере, обойдёт проблему бросков.

Еще одна мысль ... может ли замедление быть вызвано исчерпанным запасом энтропии?Возможно, вы захотите увеличить энтропию в пуле, это может сделать его очень быстрым.

1 голос
/ 10 сентября 2017

Старая проблема, но все еще вокруг ... В моем случае со встроенным Tomcat.

Решение -Djava.security.egd=file:/dev/./urandom у меня не сработало .Так что я погуглил до понимания проблемы , но после нескольких тестов с lsof стало очевидно, что обходной путь больше не работает.Быстрый просмотр кода подтвердил, что текущая реализация игнорирует это системное свойство.

Проблема заключается в блокировке Tomcat на /dev/random, поэтому я искал способы добавить энтропию в систему инашел этот ответ который работал отлично! В Debian от имени root:

apt-get install rng-tools
rngd -r /dev/urandom     # Run once during system start up

Возможно, он не настолько супер-безопасен, но, на мой взгляд, болееэтого достаточно для генерации идентификатора сессии.

Кстати, я в конечном итоге использовал Jetty.Намного быстрее, если вам не нужны все функции Tomcat.

0 голосов
/ 15 сентября 2013

Если ваше оборудование поддерживает его, попробуйте использовать Java RdRand Utility, доступную по адресу: http://code.google.com/p/lizalab-rdrand-util/

Оно основано на инструкции Intel RDRAND и примерно в 10 раз быстрее, чем SecureRandom, и проблем с пропускной способностью для реализации большого объема.*

Полное раскрытие, я автор утилиты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...