正德厚生,臻于至善

熵不足导致ebs java程序变慢

当谈到 /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

赞(0) 打赏
未经允许不得转载:徐万新之路 » 熵不足导致ebs java程序变慢
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

联系我们

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏