背景:
在云服务器上部署tomcat,启动项目时非常非常慢,有十分钟才启动完毕,有三十分钟甚至一小时才完成启动,而在物理机上启动得非常快。
在论坛上有很多解决方案,基本上都是在修改熵池后解决,然而我根据各种文章得方法尝试一遍,都无法解决,最后在查看tomcat日志时,发现了一种情况,解决后项目启动恢复正常,有尝试修改熵池后无效得伙伴,可以看看是否存在同样问题。
解决方案:
一、这里先把熵池解决方案放上来
两种方法的前置条件 ---- 确认熵池大小,确认云服务器是否支持:
查看熵池大小 (3000+ 算正常):
cat /proc/sys/kernel/random/entropy_avail
查看cpu是否支持:
cat /proc/cpuinfo | grep rdrand
一般都支持,如果不支持就用/dev/unrandom来做“熵源”。以Centos7为例:
安装熵工具:
yum install rngd-tools
启动
systemctl start rngd
指定路径
cp /usr/lib/systemd/system/rngd.service /etc/systemd/system
编辑
vim /etc/systemd/system/rngd.service
配置
ExecStart=/sbin/rngd -f -r /dev/urandom
重载
systemctl daemon-reload
重启
systemctl restart rngd
第一种:通过修改Tomcat启动文件
#修改Tomcat启动文件catalina.sh文件中加入 此行代码
-Djava.security.egd=file:/dev/urandom
第二种:通过修改JRE中的/jre/lib/security/java.security文件
securerandom.source=file:/dev/urandom
二、修改hosts文件(这个就是我用的方法啦)
在查看tomcat启动日志中,发现在以下方法上会卡住,因此怀疑可能是解析本机host出现了问题
at java.net.Inet4AddressImpl.lookupAllHostAddr(Native Method)
通过这行代码是检索/etc/hosts文件,获取当前机器名对应的IP地址,如果没有明确配置机器名和IP的映射关系,就会在这里卡住,其实就是在局域网内去ping了
然后打开我的/etc/hosts,果然没有配置,赶紧补上,如下
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 host-192-168-126-120
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 host-192-168-126-120
其中,host-192-168-126-120就是手工设置的机器名。
如果不知道机器名是啥,输入以下命令即可获取
hostname
补上后,在重启tomcat,发现速度非常奈斯了。