Ich dachte wirklich, dass nach etwa 200 oder mehr Tomcat-Installationen auf verschiedenen Plattformen, bin ich bereit für jede Art von Herausforderung, aber diese ist knifflig.Oracle Java 8 x64 für Linux und RandomSource
Ich habe eine Vanille Ubunutu 14_04 Bild erstellt und Java 8 TGZ von Oracle auf diesem System installiert. Außerdem habe ich dem Spiel einen Kater 8 hinzugefügt. Dann habe ich mit der Installation des Vanilla-Servers begonnen.
Bald nachdem ich mit der Bereitstellung der Standard-Apps, die mit Tomcat ausgeliefert wurden, beschäftigt war, fragte ich mich, was dort passiert und machte ein paar Threaddumps. Dies war der miesen Faden, den Kater von Ausgang verhindert:
"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)
Nach mehr & Freunde google ich entdecken, dass die SeedGenerator
mit dem JDK ausgeliefert ist die Quelle meines Problems. Interessanterweise kam der SeedGenerator nach einigen Minuten zurück und manchmal hing er einfach (Entropie ausgegangen? ... überprüft über cat /proc/sys/kernel/random/entropy_avail
). Nach weiteren Recherchen fand ich heraus, dass eine Konfigurationsvariable in $JAVA_HOME$/lib/security/java.security
namens securerandom.source
definiert, was die Quelle für Random ist. In meinem Fall, oder besser im Oracle JDK 8 für Linux installieren, war es /dev/random
. Ich bin kein Linux-Experte (ich bin ein Java-Entwickler), aber was ich verstanden habe, ist, dass /dev/random
Entropie ausgehen kann (was auch immer das bedeutet), aber vielleicht bedeutet es irgendwann, dass es keine Zufallszahlen mehr erzeugen kann). Ich wechselte zu /dev/urandom
und alles war gut mit meinem Kater.
Dann habe ich überprüft, wie andere JDK-Installationen auf meinem anderen verschiedenen Server aussehen, die eine wilde Mischung aus OpenJDK und älteren Oracle JDK-Installationen waren. Zumindest OpenJDK verwendet immer /dev/urandom
was könnte die Antwort sein, warum ich das Problem vorher noch nie hatte.
Nun zu meiner Frage: Ist es von Oracle vernünftig, sich auf /dev/random
zu verlassen, wenn es Fälle geben kann, in denen das OS keine Zahlen mehr produzieren kann? Ich meine Server wie Tomcat und viele andere verlassen sich auf SeedGenerator
aus dem JDK und Debuggen dieser Art von Fehler ist wirklich fortgeschritten. Nahm mich zwei Stunden, um zu dem Punkt zu kommen, wo ich jetzt bin.
Ich bin mir nicht sicher, ob dies das Problem lösen kann, weil ich dieses Problem nie hatte, aber die Verwendung von Tomcat native Bibliothek http://tomcat.apache.org/tomcat-8.0-doc/apr.html kann Ihnen helfen, zu überspringen Dieses Problem, plus einige Leistungsverbesserung, da es eine native Bibliothek für Zufallszahlen verwendet, ... Bitte lassen Sie mich wissen, wenn es geholfen hat – M2je
http://www.2uo.de/myths-about-urandom/ erklärt/dev/random und/dev/urandom sehr gut und teilt auch meine Ansicht mit/dev/random bei der Verwendung von ... Sagen wir ... Apllication Server wegen seiner blockierenden Natur. – Marc
Sie [sah diesen Fehler] (http://bugs.java.com/view_bug.do?bug_id=4705093) richtig? Sagt, es ist in JDK 8 behoben. Vielleicht ist es ein Fehler in Tomcat, wenn es keine neuere Implementierung von 'SecureRandom' verwendet ... Sie könnten auf der Tomcat Mailingliste fragen. – david