Linux中的随机数可以从两个特殊的文件中产生,一个是
/dev/urandom
,另外一个是/dev/random
。他们产生随机数的原理是利用当前系统的熵池来计算出固定一定数量的随机比特,然后将这些比特作为字节流返回。
JDK在linux上默认使用的随机数策略是/dev/random
。在很多java服务上,在启动的时候会去生成一个随机数。由于JDK默认的使用/dev/random
会导致其生成随机数会出现耗时几分钟的情况。鄙人被坑过2次。每次都苦苦寻找原因,打断点,将此记录一下。有2
种方式可以将这个问题解决。
服务指定生成策略
加上
jvm
参数:-Djava.security.egd=file:/dev/./urandom
来指定生成策略。建议使用此种方式
修改java.security文件
找到服务启动指定的JAVA_HOME
环境下jre/lib/security/java.security
这个文件,将
securerandom.source=file:/dev/urandom替换成securerandom.source=file:/dev/./urandom
即可。