Oracle Java 8 x64 for Linux 和 RandomSource
我真的认为,在各种平台上安装了大约200个或更多的tomcat之后,我已经准备好迎接任何类型的挑战,但这个挑战很棘手。
我创建了一个vanilla Ubunutu 14_04映像,并在该系统上安装了Oracle的Java 8 TGZ。此外,我在游戏中添加了一只雄猫8。然后我开始安装香草服务器。
在坚持部署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)
在更多的谷歌和朋友之后,我发现与JDK一起发货是我问题的根源。有趣的是,有时种子生成器在几分钟后又回来了,有时它只是挂起(耗尽熵?检查通过 )。经过更多的研究,我发现一个名为的配置变量定义了 Random 的源代码是什么。在我的情况下,或者在用于linux的oracle JDK 8安装中更好,它是.我不是Linux专家(我是Java开发人员),但我的理解是,熵可能会耗尽(无论这意味着什么),但也许这意味着在某些时候它不能产生更多的随机数)。我换了,我的雄猫一切都很好。SeedGenerator
cat /proc/sys/kernel/random/entropy_avail
$JAVA_HOME$/lib/security/java.security
securerandom.source
/dev/random
/dev/random
/dev/urandom
然后我检查了其他JDK安装在我的其他各种服务器上的样子,这些服务器是OpenJDK和较旧的Oracle JDK安装的疯狂混合。至少OpenJDK总是使用可能的答案,为什么我以前从未遇到过这个问题。/dev/urandom
现在来回答我的问题:当操作系统无法产生更多数字的极端情况下,Oracle是否明智地依赖它?我的意思是像Tomcat这样的服务器和许多其他服务器依赖于JDK,调试这种错误真的很先进。我花了2个小时才达到我现在的位置。/dev/random
SeedGenerator