उत्तर oracle फ़ोरम से लिया गया, यहां :
java.security.SecureRandom
सूर्य द्वारा प्रदान किया गया एक मानक एपीआई है। इस वर्ग द्वारा दी जाने वाली विभिन्न विधियों में से void nextBytes(byte[])
।
इस विधि का उपयोग यादृच्छिक बाइट्स उत्पन्न करने के लिए किया जाता है। Oracle 11g JDBC ड्राइवर लॉगिन के दौरान यादृच्छिक संख्या उत्पन्न करने के लिए इस API का उपयोग करते हैं। Linux का उपयोग करने वाले उपयोगकर्ताओं को SQLException("Io exception: Connection reset")
. का सामना करना पड़ रहा है ।
समस्या दो गुना है:
-
जब
SecureRandom.nextBytes(byte[])
JVM /tmp (या -Djava.io.tmpdir द्वारा निर्धारित वैकल्पिक tmp निर्देशिका) में सभी फाइलों को सूचीबद्ध करने का प्रयास करता है आह्वान किया जाता है। यदि फ़ाइलों की संख्या बड़ी है, तो थीम विधि को प्रतिक्रिया देने में लंबा समय लगता है और इसलिए सर्वर का समय समाप्त हो जाता है -
विधि
void nextBytes(byte[])
लिनक्स पर /dev/random का उपयोग करता है और कुछ मशीनों पर जिनमें यादृच्छिक संख्या उत्पन्न करने वाले हार्डवेयर की कमी होती है, ऑपरेशन पूरी लॉगिन प्रक्रिया को रोकने की सीमा तक धीमा हो जाता है। अंततः उपयोगकर्ता का सामना SQLException ("Io अपवाद:कनेक्शन रीसेट") से होता है
11g में अपग्रेड करने वाले उपयोगकर्ता इस समस्या का सामना कर सकते हैं यदि अंतर्निहित OS Linux है जो एक दोषपूर्ण हार्डवेयर पर चल रहा है।
इसका कारण अभी तक सटीक रूप से निर्धारित नहीं किया गया है। यह या तो हार्डवेयर में समस्या हो सकती है या तथ्य यह है कि किसी कारण से सॉफ़्टवेयर dev/random
से नहीं पढ़ सकता है
एक समाधान ऐसा लगता है कि इस सेटिंग को jvm में जोड़ा जा रहा है
-Djava.security.egd=file:/dev/./urandom