随机数与rngd服务
详解熵池
熵池本质上是若干字节。/proc/sys/kernel/random/entropy_avail中存储了熵池现在的大小,/proc/sys/kernel/random/poolsize是熵池的最大容量,单位都是bit。如果entropy_avail的值小于要产生的随机数bit数,那么/dev/random就会堵塞。
那么,为什么熵池不够用呢?
google了一下资料,熵池实际上是从各种noice source中获取数据,noice source可能是键盘事件、鼠标事件、设备时钟中等。linux内核从2.4升级到2.6时,处于安全性的考虑,废弃了一些source。source减少了,熵池补给的速度当然也变慢,进而不够用。
其实,通过消耗熵池,可以构造DOS攻击。原理很简单,熵池空了,依赖随机数的业务(SSL,加密等)就不能正常进行
————————————————
版权声明:本文为CSDN博主「chinoukin」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/chinoukin/article/details/102566755
————————————————————————————————————
https://www.cnblogs.com/zh-dream/p/14688410.html
由于rngd进程导致的tomcat 启动慢
之前在阿里云做客服的时候遇到某用户提交工单,反馈一批服务器中有一台上面运行的后端应用启动缓慢
具体现象由于客户隐私就不贴了
处理办法:
1、先让用户将程序调整到debug级别,看一下打印出来的日志,在哪一步出现了阻塞。
2、如果日志打印时有阻塞时间长的现象,可以通过strace命令看一下系统调用(我遇到的时候是日志打印的时候阻塞了很长时间)
3、/proc/sys/kernel/random/entropy_avail查看此文件中的数值大小,如果过小,那么需要安装rngd
3、rngd安装:
复制代码
yum install rng-tools 安装rngd服务
systemctl start rngd 启动服务
cp /usr/lib/systemd/system/rngd.service /etc/systemd/system
编辑 /etc/systemd/system/rngd.service service
ExecStart=/sbin/rngd -f -r /dev/urandom
systemctl daemon-reload 重新载入服务
systemctl restart rngd 重启服务
复制代码
可以使用head -c1024 /dev/random 消耗随机数,复现问题。当/proc/sys/kernel/random/entropy_avail的值很小的时候,这时tomcat会启动很慢
——————————————————————
https://bbs.huaweicloud.com/forum/thread-130873-1-1.html
/dev/random产生随机数的原理是利用当前系统的熵池(random pool)来计算出固定一定数量的随机比特,然后将这些比特作为字节流返回。如果随机池数据太少,则调用/dev/random会阻塞,等待随机池数据被填充。
而rngd系统服务的作用是负责动态补充该熵池资源,从测试环境问题情况来看,很有可能由于业务对随机数大量获取,导致rngd服务过载,性能成为瓶颈,从而反过来拖慢了业务的运行。
附-【关于随机数性能-滴池检查】
1、查看系统熵池的容量:cat /proc/sys/kernel/random/poolsize // 默认4096
2、查看从熵池中读取熵的阀值:cat /proc/sys/kernel/random/read_wakeup_threshold
3、查看当前系统熵池中拥有的熵数: cat /proc/sys/kernel/random/entropy_avail (当entropy_avail中的值少于read_wakeup_threshold阀值,这时读取/dev/random会被阻塞)