CentOS随机数导致Tomcat阻塞启动严重卡顿问题
程序员文章站
2022-05-08 22:49:08
...
故障现象:
Tomcat启动严重卡顿,经过一系列排查,发现就是JVM因为某种原因被阻塞了。
排查工具:strace ,这是一个跟踪系统调用(System Call)的工具 ,无论是Java还是Pyhton很多资源申请都会变成都会变成System Call。(比如打开文件、新建线程、读写数据、等待I/O)通过这个工具我至少可以知道 Tomcat是停止在哪个System Call上的 ,这样可以方便我推断出问题的原因。
strace -f -o strace.out ./catalina.sh run
strace有很多参数,我用了二个参数
-f:跟踪fork的子进程,通俗的说会跟踪所有线程的系统调用
-o:把内容输出到文件
传统解决方式:
用/dev/urandom替换/dev/random
终极解决方式:增大/dev/random的熵池。
问题的原因是由于熵池不够大,所以增大它是最彻底的方法。 通过 cat /proc/sys/kernel/random/entropy_avail 我们可以查看现在的熵池大小;我们需要找到一种方式来提高这个值就行了。
通过 cat /proc/cpuinfo | grep rdrand 可以查看自己的CPU是否支持,一般来说Intel的Ivy_Bridge架构的CPU都支持。
以Centos7为例:
yum install rng-tools //安装rngd服务(熵服务)
systemctl start rngd 启动服务
启动熵服务(rngd)后,可以实时查看随机数生成速度:
watch -n 1 cat /proc/sys/kernel/random/entropy_avail 观察这个值
我的机器之前是183左右,启动后为3000靠上。
问题解决。
ps:可以将rngd服务设成自动启动。
故障重现:
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 ,保证它的大小在尽可能的小, 启动tomcat,会发现长时间很长时间的等待。
上一篇: 迅为itop4412烧写ubuntu,脱离tf卡启动
下一篇: 脱卡脚本