java random 阻塞 原因查找

以下为转载:https://blog.csdn.net/weixin_38287155/article/details/95891886

SecureRandom
在随机数安全一文中提过安全随机数的概念 , 这里不具体描述 , 就是指强伪随机数甚至真随机数 . 在Java中除了弱伪随机数生成器java.util.Random之外 , 也提供了java.security.SecureRandom这种强伪随机数生成器 . 使用这种方式时 , Java会读取系统默认的随机源 . Java中有两种方法可以改变随机源的来源 :

JVM的启动项参数-Djava.security.egd
配置文件$JAVA_PATH/jre/lib/security/java.security是否配置参数securerandom.source
当两种随即源都存在时,1的优先级高于2 ; JDK1.8中,java.security文件中的securerandom.source的默认值为:file:/dev/random


/dev/random
/dev/random产生随机数的原理是利用当前系统的**熵池(random pool)**来计算出固定一定数量的随机比特,然后将这些比特作为字节流返回

熵池就是当前系统的环境噪音,熵指的是一个系统的混乱程度,系统噪音可以通过 很多参数来评估,如内存的使用,文件的使用量,不同类型的进程数量等等。如果当前环境噪音变化的不是很剧烈或者当前环境噪音很小,比如刚开机的时候,这产生的随机数的效果就不是很好了,/dev/random会阻塞当前的程序,直到根据熵池产生新的随机字节之后才返回

由于/dev/random生成强伪随机数的过程会阻塞当前的程序 , 所以生成随机数的速度必须越快越好 ; 而熵值从小数值升到目标数值的速度就是生成随机数的速度 , 为此 , 我们必须想办法提高熵值


haveged的使用
我们可以使用haveged组件来进行补熵

执行service haveged status或者ps –ef | grep "haveged" | grep -v "grep"命令可以确认系统是否开启了haveged进程

启动haveged , 并将其设置为随系统启动 :

systemctl start haveged
systemctl enable haveged.service
1
2
停止haveged : service haveged stop

在启动完havged后 , 可以通过cat /dev/random | od –x来查看屏幕输出随机数的速度明显比未开启时要快得多 ; cat /proc/sys/kernel/random/entropy_avail可以查看当前熵值 ; 没开启havaged正常是100多 , 开启之后会增大到1000多甚至2000
 ———————————————— 
版权声明:本文为CSDN博主「WongZeffung」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_38287155/article/details/95891886

你可能感兴趣的:(java基础)