首页  

linux熵池太小导致随机函数阻塞     所属分类 architecture 浏览量 1690
熵池本质上是若干字节,单位是bit
/proc/sys/kernel/random/entropy_avail  熵池当前大小
/proc/sys/kernel/random/poolsize       熵池的最大容量
如果entropy_avail的值小于要产生的随机数bit数, /dev/random 会阻塞

熵池从各种noice source中获取数据,noice source可能是键盘事件、鼠标事件、设备时钟等。
linux内核从2.4升级到2.6时,处于安全性的考虑,废弃了一些source。
source减少了,熵池补给的速度当然也变慢,进而不够用。
通过消耗熵池,可以构造DOS攻击。熵池空了,依赖随机数的业务(SSL,加密等)就不能正常进行

 
某业务系统使用 drools , 运行几天之后 ,规则编译非常慢 ,从10秒左右飙升到700多秒
drools规则编译时使用 UUID.randomUUID() 函数


import java.security.SecureRandom;
import java.util.UUID;

public class SecureRandomTest {	
	public static void main(String[] args) throws Exception {
		// 熵池不够会阻塞
		System.out.println(UUID.randomUUID().toString());
        SecureRandom secureRandom = new SecureRandom();
		System.out.println(secureRandom.nextInt());	
	}
}


tomcat启动很慢  

补充熵池
可以通过安装rng-tools来补充熵池,查看熵池大小 
cat /proc/sys/kernel/random/entropy_avail
    
yum install -y rng-tools
systemctl start rngd
systemctl enable rngd
    
熵池 一般应大于3000

node_exporter  熵池相关监控指标 
node_entropy_available_bits

上一篇     下一篇
prometheus 查询例子

springboot ApplicationContextInitializer 使用

日志框架冲突及解决方法

Random和SecureRandom

熵池与SecureRandom

老程序员的20条编码原则