当谈到 /dev/random 和 /dev/urandom 的主题时,你总是会听到这个词:“熵Entropy”。每个人对此似乎都有自己的比喻。那为我呢?我喜欢将熵视为“随机果汁”。它是果汁,随机数需要它变得更随机。
/dev/urandom 是一个伪随机数生成器,缺乏熵它也不会停止。
/dev/random 是一个真随机数生成器,它会在缺乏熵的时候停止。
https://linux.cn/article-9697-1.html
/proc/sys/kernel/random/poolsize,说明熵池的大小(以位为单位)。例如:在停止抽水之前我们应该储存多少随机果汁。
/proc/sys/kernel/random/entropy_avail 是当前池中随机果汁的数量(以位为单位)。
我们如何影响这个数字?
这个数字可以像我们使用它一样耗尽。我可以想出的最简单的例子是将 /dev/random 定向到 /dev/null 中:
cat /dev/random > /dev/null &
[1] 19058
cat /proc/sys/kernel/random/entropy_avail
0
cat /proc/sys/kernel/random/entropy_avail
1
影响这个最简单的方法是运行 Haveged。Haveged 是一个守护进程,它使用处理器的“抖动”将熵添加到系统熵池中。安装和基本设置非常简单。
systemctl enable haveged
systemctl start haveged
pv /dev/random > /dev/null
systemctl start haveged
pv /dev/random > /dev/null
Oracle Linux: Failed to Start Service rngd after Installing RNG (Random Number Generator) Tools (Doc ID 2465172.1)
cat /proc/sys/kernel/random/entropy_avail
egrep ‘^processor|^model name|^microcode|^flags’ /proc/cpuinfo
flags中包含rdrand字样
time dd if=/dev/random of=/dev/null bs=1024 count=1 iflag=fullblock
time dd if=/dev/urandom of=/dev/null bs=1024 count=1 iflag=fullblock
time dd if=/dev/./urandom of=/dev/null bs=1024 count=1 iflag=fullblock
Java Programs Are Running Slower In Newer Servers Due To Lack Of Entropy In The System (Doc ID 1615981.1)
yum -y install rng-tools
chkconfig rngd on
service rngd restart
如果你的CPU不支持DRNG特性或者像我一样使用虚拟机,可以使用/dev/unrandom来模拟。
watch -n 1 cat /proc/sys/kernel/random/entropy_avail 观察这个值
cat /proc/sys/kernel/random/entropy_avail
如果cpu版本太老,不支持RDRAND,则
vim $ADMIN_SCRIPTS_HOME/java.sh
JAVA_TOOL_OPTIONS=”-Djava.security.egd=file:/dev/urandom”
export JAVA_TOOL_OPTIONS
如何重现故障
可以很容易的重现文章中描述的故障
systemctl stop rngd 停止rngd服务(如果你有启动rngd)
查看当前熵池的大小 cat /proc/sys/kernel/random/entropy_avail
head -c1024 /dev/random ,强制消费1024个随机数,系统会长时间没有反应。直接ctrl+c
再次查看熵池的大小 cat /proc/sys/kernel/random/entropy_avail ,保证它的大小在尽可能的小
启动java程序,会发现长时间很长时间的等待
EM 11g: the Enterprise Manager Grid Control OMS Fails To Start when the Host Entropy Value is too Low (RHEL5) (Doc ID 1399980.1)
低版本如RHEL5.5处理办法
cat /proc/sys/kernel/random/entropy_avail
cat /proc/sys/kernel/random/poolsize
rpm -qa | grep rng
rngd -r /dev/urandom -o /dev/random -f -t 1
rngd -r /dev/urandom -o /dev/random -t 1
rngd -r /dev/urandom -o /dev/random -f
rngd -r /dev/urandom -o /dev/random
rpm -qa | grep rng
胥昕ops: SAE 二三月份遇到的这个问题,一条命令秒杀此问题,
$ rngd -r /dev/urandom -o /dev/random -t 1
用urandom的结果填充entropy池子,这样既保证了entropy池的数量,也保证了随机性
watch -n 1 cat /proc/sys/kernel/random/entropy_avail
最新评论
这个牛
放下欲望,男人从来不醉,充分且必要
勇气、责任、自信、创新,为天下先!
软件即数据,软件即服务,软件即管理,软件就是对人类各种社会活动的仿真和记录。软件很重要,但软件不可能凌驾于业务之上,尤其不可能高人一等。