Oracle Java 8 x64 для Linux и RandomSource

Я действительно думал, что после примерно 200 или более установок Tomcat на разных платформах я готов к любым вызовам, но это сложно.

Я создал ванильный образ Ubunutu 14_04 и установил Java 8 TGZ из Oracle на этой системе. Кроме того, я добавил кота 8 в игру. Затем я начал установку сервера vanilla.

Вскоре после зависания при развертывании приложений по умолчанию, поставляемых с tomcat, я подумал, что там происходит, и сделал несколько потоковых дампов. Этот был паршивым потоком, который препятствовал запуску tomcat:

"localhost-startStop-1" #15 daemon prio=5 os_prio=0 tid=0x00007f37c8004800 nid=0x4d6 runnable [0x00007f37b38b3000]
   java.lang.Thread.State: RUNNABLE
    at java.io.FileInputStream.readBytes(Native Method)
    at java.io.FileInputStream.read(FileInputStream.java:246)
    at sun.security.provider.SeedGenerator$URLSeedGenerator.getSeedBytes(SeedGenerator.java:539)
    at sun.security.provider.SeedGenerator.generateSeed(SeedGenerator.java:144)
    at sun.security.provider.SecureRandom$SeederHolder.<clinit>(SecureRandom.java:192)
    at sun.security.provider.SecureRandom.engineNextBytes(SecureRandom.java:210)
    - locked <0x00000000f06e6ce8> (a sun.security.provider.SecureRandom)
    at java.security.SecureRandom.nextBytes(SecureRandom.java:457)
    - locked <0x00000000f06e71c0> (a java.security.SecureRandom)
    at java.security.SecureRandom.next(SecureRandom.java:480)
    at java.util.Random.nextInt(Random.java:329)
    at org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom(SessionIdGeneratorBase.java:234)

После нескольких Google и друзей я обнаружил, чтоSeedGenerator Поставленный с JDK источник моей проблемы. Интересно, что иногда SeedGenerator возвращался через несколько минут, а иногда просто зависал (кончалась энтропия? ... проверено с помощьюcat /proc/sys/kernel/random/entropy_avail) После дополнительных исследований я обнаружил, что переменная конфигурации в$JAVA_HOME$/lib/security/java.security называетсяsecurerandom.source определяет, что является источником для Random. В моем случае или лучше в oracle JDK 8 установить для linux, это было/dev/random, Я не эксперт по Linux (я Java-разработчик), но я понял, что/dev/random может закончиться энтропия (что бы это ни значило), но, возможно, это означает, что в какой-то момент не может генерировать больше случайных чисел). Я перешел на/dev/urandom и все было хорошо с моим котом.

Затем я проверил, как выглядят другие установки JDK на моем другом сервере, представляющем собой дикую смесь OpenJDK и более старых установок Oracle JDK. По крайней мере, OpenJDK всегда используется/dev/urandom какой может быть ответ, почему у меня никогда не было проблемы раньше.

Теперь на мой вопрос: Стоит ли полагаться на Oracle/dev/random когда могут быть угловые случаи, когда ОС не может произвести больше чисел? Я имею в виду такие серверы, как Tomcat и многие другиеSeedGenerator от JDK и отладки такого рода ошибки действительно продвинулись. Мне потребовалось 2 часа, чтобы добраться до того места, где я сейчас нахожусь.

Ответы на вопрос(2)

Ваш ответ на вопрос