13 Feb 2017
最近线上开始升级tomcat6到tomcat7,遇到了几个启动方面的问题,在同事的共同努力下,顺利解决。在这个过程中新接触了一个概念:熵池,本着知其然,更要知其所以然的态度,网上搜罗了不少资料,在这里做个简要的总结。
主要的参考:
Linux 内核采用熵来描述数据的随机性,熵(entropy)是描述系统混乱无序程度的物理量,一个系统的熵越大则说明该系统的有序性越差,即不确定性越大。内核维护了一个熵池用来收集来自设备驱动程序和其它来源的环境噪音。理论上,熵池中的数据是完全随机的,可以实现产生真随机数序列。为跟踪熵池中数据的随机性,内核在将数据加入池的时候将估算数据的随机性,这个过程称作熵估算。熵估算值描述池中包含的随机数位数,其值越大表示池中数据的随机性越好。
上面的定义摘自IBM的链接,抛开其他不谈,我们主要谈论熵池对于随机数产生的作用,内核中随机数发生器 PRNG 为一个字符设备 random,该设备实现了一系列接口函数用于获取系统环境的噪声数据,并加入熵池。系统环境的噪声数据包括设备两次中断间的间隔,输入设备的操作时间间隔,连续磁盘操作的时间间隔等。
random 设备了提供了 2 个字符设备供用户态进程使用——/dev/random 和/dev/urandom:
tomcat7会重度的依赖SecureRandom这个类来产生随机数,用于session id和其它地方的随机数需要。默认的情况,tomcat7使用的是/dev/random这个设备,所以在熵池数值过低时,导致阻塞,则会拖慢tomcat7的启动速度。
rng-tools可以通过使用硬件随机数生成器TRNG来加快熵增,以加快/dev/random获得随机数的速度。或者,我们可以通过配置使用/dev/urandom来增快随机数获得速度
yum -y install rng-tools echo 'EXTRAOPTIONS="--rng-device /dev/urandom"' >/etc/sysconfig/rngd service rngd start chkconfig rngd on cat /proc/sys/kernel/random/entropy_avail
vim $CATALINA_BASE/bin/catalina.sh ************************************************* # 增加以下参数 CATALINA_OPTS="$CATALINA_OPTS -Djava.security.egd=file:/dev/./urandom" *************************************************