The Sun/Oracle-based JVM is attempting to generate a pseudo-random number to be used as a seed for an SSL server socket. To generate the pseudo-random number, the JVM is reading from the /dev/random device to obtain some random information for the seed. The problem is that reads from the /dev/random device will block if the system does not have a good source of random events. So, the Geronimo server startup is blocked waiting for enough random information to be returned from /dev/random. This article may be help understand the basic issue — http://en.wikipedia.org/wiki//dev/random#Linux
I’m no security expert. And I don’t know the potential implications, but the simplest way that I’ve found to avoid the problem is to use the /dev/urandom device, instead of /dev/random. Do this by specifying the following java property ‘-Djava.security.egd=file:/dev/./urandom‘.
But keep in mind that often setting up the mentioned property does not make any difference.
It’s a bug in Java.
A bug was submitted in 2004 but updated and resolved in 2012.
Java picks up /dev/random even though /dev/urandom is passed in command
line. The workaround around is to trick java to use /dev/urandom, by using
/dev/./urandom. Basically it’s the same device, (.) dot means current
Look also at the class SecureRandom
More cardinal measure is to change /dev/random for /dev/urandom globally in the system:
# rm /dev/random
# mknod /dev/random c 1 9