Q: Why the SecureRandom generateSeed is so slow or even hang on Linux OS?
A: When you login, it hangs or takes more than a minute to get the response.
If your server is on a Linux OS, the culprit here is SecureRandom generateSeed()
which uses /dev/random to generate the seed. However, /dev/random is a blocking
number generator and if it doesn't have enough random data to provide, it will
simply wait until it does, which forces the JVM to wait. Keyboard and mouse input
as well as disk activity can generate the randomness or entropy needed. But on a
server that lacks such activies, the problem may arise.
To verify this, run command:
it could be 150 or less, instead of the normal 3000-4000.
There are two options to workaround this problem:
1) Use jvm param: -Djava.security.egd=file:/dev/./urandom
or even better
2) run daemon: /sbin/rngd -r /dev/urandom -o /dev/random -t 5
you can add this in rc.local or you can use
/etc/init.d/rngd, but make sure /etc/sysconfig/rngd has
EXTRAOPTIONS="-r /dev/urandom -o /dev/random -t 5"
Or, if you are on systemd, then you might already have rngd.service,
just enable and start it.
run ps -aux|grep rngd to see it is running.
* Reference brought to you by
Bugzero, it's more than just bug tracking software!