2016-07-11 22 views
0

Unter den Stillstand als Folge der Faden immer gesperrt, während das Abrufen TXT-Eintrag von DNSThema hängt, während DNS-Abfrage ausgeführt JNDI Bibliothek unter Verwendung

java.lang.Thread.State: RUNNABLE 
    at java.io.FileInputStream.readBytes(Native Method) 
    at java.io.FileInputStream.read(FileInputStream.java:272) 
    at sun.security.provider.NativePRNG$RandomIO.readFully(NativePRNG.java:202) 
    at sun.security.provider.NativePRNG$RandomIO.ensureBufferValid(NativePRNG.java:264) 
    at sun.security.provider.NativePRNG$RandomIO.implNextBytes(NativePRNG.java:278) 
    - locked <0x00000004f3cd17b0> (a java.lang.Object) 
    at sun.security.provider.NativePRNG$RandomIO.access$200(NativePRNG.java:125) 
    at sun.security.provider.NativePRNG.engineNextBytes(NativePRNG.java:114) 
    at java.security.SecureRandom.nextBytes(SecureRandom.java:466) 
    - locked <0x00000004f111d290> (a java.security.SecureRandom) 
    at java.security.SecureRandom.next(SecureRandom.java:488) 
    at java.util.Random.nextInt(Random.java:303) 
    at com.sun.jndi.dns.DnsClient.query(DnsClient.java:175) 
    at com.sun.jndi.dns.Resolver.query(Resolver.java:81) 
    at com.sun.jndi.dns.DnsContext.c_getAttributes(DnsContext.java:430) 
    at com.sun.jndi.toolkit.ctx.ComponentDirContext.p_getAttributes(ComponentDirContext.java:231) 
    at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.getAttributes(PartialCompositeDirContext.java:139) 
    at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.getAttributes(PartialCompositeDirContext.java:127) 
    at javax.naming.directory.InitialDirContext.getAttributes(InitialDirContext.java:142) 

auf die Analyse angetroffen wird, finde ich, dass dieser Thread Sperre die fällig ist Langsamkeit beim Ausführen von java.security.SecureRandom.next.

Unten jdk Fehler für eine ähnliche Sackgasse eingereicht angetroffen https://bugs.openjdk.java.net/browse/JDK-8066209

Kann jemand bitte lassen Sie mich den Grund dafür & auftretende wissen, wie diese gelöst werden?

+0

Interessante zu verwenden. Ich sehe das auch, habe aber keine Lösung oder Ursache. Ich kann Ihnen sagen, dass das in meinem Fall nichts mit DNS zu tun hat, sondern mit SecureRandom direkt. –

Antwort

1

Ich sah das gleiche Problem und ich glaube, dass ich es gelöst habe. Das Problem scheint zu sein, dass SecureRandom.nextBytes/dev/random liest. Wenn jedoch im Entropie-Pool /dev/random keine ausreichende Entropie übrig ist, wird der Lesevorgang blockiert. Für mögliche Lösungen finden the Oracle docs über die Frage, this excellent article über Optionen für Secure und this bug über die Java-Option Einstellung /dev/./urandom eher als die scheinbar gleichwertigen /dev/urandom