Отговорът е взет от форума на oracle, тук :
java.security.SecureRandom
е стандартен API, предоставен от sun. Сред различните методи, предлагани от този клас void nextBytes(byte[])
.
Този метод се използва за генериране на произволни байтове. Драйверите на Oracle 11g JDBC използват този API за генериране на произволни числа по време на влизане. Потребителите, използващи Linux, са се сблъсквали с SQLException("Io exception: Connection reset")
.
Проблемът е два пъти:
-
JVM се опитва да изброи всички файлове в /tmp (или алтернативна tmp директория, зададена от -Djava.io.tmpdir), когато
SecureRandom.nextBytes(byte[])
се извиква. Ако броят на файловете е голям, методът отнема много време, за да отговори и следователно води до изчакване на сървъра -
Методът
void nextBytes(byte[])
използва /dev/random на Linux и на някои машини, на които липсва хардуер за генериране на произволни числа, операцията се забавя до степен, че спира целия процес на влизане. В крайна сметка потребителят се сблъсква с SQLException("Io изключение:нулиране на връзката")
Потребителите, които надграждат до 11g, могат да се сблъскат с този проблем, ако основната ОС е Linux, която работи на дефектен хардуер.
Причината за това все още не е установена точно. Може да е проблем в хардуера или факта, че по някаква причина софтуерът не може да чете от dev/random
еднорешение изглежда добавя тази настройка към jvm
-Djava.security.egd=file:/dev/./urandom