一.问题
其实这个问题在使用云服务器的第二天就出现了,
当时更新了下代码,重启tomcat,直接就卡住了,没有日志,没有报错,
直接就把我搞蒙逼了,当时还以为是服务器太差了吧,哈哈。
随机在另外的tty上瞎点了几下,桌面乱动了下,多用鼠标键盘操作了下,结果就好了,当时还真没注意到这是个问题。
后来在路上回想,越想越觉得不对,里面肯定有问题,随便搜索了下,果然有问题!
一切都是linux系统下随机数的生成机制在作怪。
tomcat启动过程中需要用到随机数,默认使用的为/dev/random 生成的真随机数,
再tomcat获取到足够多的随机数前,启动过程会卡住,一直等待,直到随机数足够,能完成随机密钥的生成。
WARNING [localhost-startStop-1] org.apache.catalina.util.SessionIdGeneratorBase.createSecur
3 Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [33,544] milliseconds.
当系统启动的东西很少/操作也很少的情况下,没有足够的噪点数据来产生绝对的随机数,这样就会一直等待。。。33秒。。
使用以下命令查看,当发现数值很小的时候,可以确定是这个问题导致的卡住无响应。
cat /proc/sys/kernel/random/entropy_avail
会发现数值很小。
/usr/local# cat /proc/sys/kernel/random/entropy_avail
190
二.处理
解决方法网络上也有很多了。
直接修改tomcat/修改jdk配置。
这就不说了。
最终目的就是增大entropy_avail,或者说是加快这个数字的产生,以让tomcat能够有充足的随机数来源.
使用工具 rng-tools.
Centos:
yum install rng-tools # 安装rngd服务(熵服务,增大熵池)
systemctl start rngd # 启动服务
Ubuntu:
sudo apt-get install rng-tools
rngd -r /dev/urandom -o /dev/random
启动rng-服务后,用程序辅助生成随机数/填充.
然后在看数据
cat /proc/sys/kernel/random/entropy_avail
3099
立马就大了。
一旦有足够的随机数,问题就解决了,这下就不用卡了。- -!
本文基于CC BY-NC-ND 4.0 许可协议发布,作者:野生的喵喵。 固定链接: 【ECS Ubuntu云服务器Tomcat启动超级慢问题处理】 转载请注明
相关文章: