Jawaban diambil dari forum oracle, di sini :
java.security.SecureRandom
adalah API standar yang disediakan oleh sun. Di antara berbagai metode yang ditawarkan oleh kelas ini void nextBytes(byte[])
.
Metode ini digunakan untuk menghasilkan byte acak. Driver Oracle 11g JDBC menggunakan API ini untuk menghasilkan nomor acak saat login. Pengguna yang menggunakan Linux telah menemukan SQLException("Io exception: Connection reset")
.
Masalahnya ada dua:
-
JVM mencoba membuat daftar semua file di /tmp (atau direktori tmp alternatif yang ditetapkan oleh -Djava.io.tmpdir) ketika
SecureRandom.nextBytes(byte[])
dipanggil. Jika jumlah file besar, metode ini membutuhkan waktu lama untuk merespons dan karenanya menyebabkan server kehabisan waktu -
Metode
void nextBytes(byte[])
menggunakan /dev/random di Linux dan pada beberapa mesin yang tidak memiliki perangkat keras penghasil angka acak, operasi melambat sampai-sampai menghentikan seluruh proses login. Pada akhirnya pengguna menemukan SQLException("Io exception:Connection reset")
Pengguna yang mengupgrade ke 11g dapat mengalami masalah ini jika OS yang mendasarinya adalah Linux yang berjalan pada perangkat keras yang rusak.
Penyebab hal ini belum ditentukan secara pasti. Ini bisa menjadi masalah pada perangkat keras atau fakta bahwa karena alasan tertentu perangkat lunak tidak dapat membaca dari dev/random
sebuah solusi sepertinya menambahkan pengaturan ini ke jvm
-Djava.security.egd=file:/dev/./urandom