最近在搭elk时,发现logstash在服务器上要花费将近10分钟才能启动完成开始pipeline jruby启动的时候jdk回去从/dev/random中初始化随机数熵,新版本的jruby会用RPNG算法产生随后的随机数,但是旧版本的jruby会持续从/dev/random中获取数字。但是不幸的是,random发生器会跟不上生成速度,所以获取随机数的过程会被阻塞,直到随机数池拥有足够的熵然后恢复。这在某些系统上,尤其是虚拟化系统,熵数池可能会比较小从而会减慢jruby的启动速度。 检查了一下系统的熵数池
cat /proc/sys/kernel/random/entropy_avail
,发现只有65,正常情况这个数字推荐大于1000,对比了一下独立主机的这个数值,大约在700-900之间晃悠。
解决
最简单的解决方案是安装一个熵数发生器,比如
Haveged ,centos可从epel源中获取,安装后启动服务
sudo systemctl start haveged
就可以看到entropy_avail暴涨至2000多,logstash几乎是秒启,然后再
sudo systemctl enable haveged
设为开机自启。