阿里云服务器tomcat启动太慢或访问应用堵塞 解决

解决方法1,转载于http://www.cnblogs.com/dingxiaochao/p/9544005.html

下面说解决方式:

tomcat bin/ catalina.sh 中加入

JAVA_OPTS="$JAVA_OPTS -Djava.security.egd=file:/dev/./urandom"

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

解决方法二

转载于https://blog.csdn.net/u013361107/article/details/80826092

之前在阿里云上部了应用,今天访问的时候登陆不进去,像是阻塞了,浏览器一直在转。通过http工具进服务器看了进程也没down,日志也没报错,浏览器请求返回304。一开始我以为是因为这台阿里云服务器内存太小导致,然后我kill掉了所有tomcat进程,打算重启一遍应用。这个时候让人郁闷的事情发生了,所有的应用tomcat启动日志都停在了Root WebApplicationContext: initialization completed in XXX ms这里。容器都初始化成功了也没报错,为什么就停着了呢。

        然而相同的项目,我部署到公司自己的服务器的时候,就不会这样,在排除了其他所有的可能情况之后,我发现应该是阿里云服务器本身的问题,在网上找了相关资料之后,在https://www.jianshu.com/p/576d356dc163这里找到了答案。

        简而言之,就是阿里云服务器的熵池太小,可用命令cat /proc/sys/kernel/random/entropy_avail查看服务器熵池。Tocmat的Session ID是通过SHA1算法计算得到的,计算Session ID的时候必须有一个密钥。为了提高安全性Tomcat在启动的时候会通过随机生成一个密钥。在 http://wiki.apache.org/tomcat/HowTo/FasterStartUp (Entropy Source部分)有一段解释。我也不是很懂,总之在Tomcat的启动文件里有一项随机函数生成器的配置,即-Djava.security.egd=file:/dev/random,将它改成-Djava.security.egd=file:/dev/urandom。或通过修改JRE中的java.security文件securerandom.source=file:/dev/urandom。

    然而这样的修改会降低系统的安全性。在我们知道了这是由于熵池不够的情况下,我们可以做更本质的解决,让熵池变大。

    如果你的CPU带有DRNG特性,可以充分利用硬件来提高熵池产生的速度 。通过cat /proc/cpuinfo | grep rdrand可以查看自己的CPU是否支持。

    以下内容转自https://www.jianshu.com/p/576d356dc163

我们可以让/dev/unrandom来做“熵源”。以Centos7为例,
yum install rngd-tools
或者yum install rng-tools
安装rngd服务(熵服务)

systemctl start rngd
启动服务
如果你的CPU不支持DRNG特性或者像我一样使用虚拟机,可以使用/dev/unrandom来模拟。

cp /usr/lib/systemd/system/rngd.service /etc/systemd/system

编辑/etc/systemd/system/rngd.service
service小结,ExecStart=/sbin/rngd -f -r /dev/urandom

systemctl daemon-reload
重新载入服务

systemctl restart rngd
重启服务

经过上面的修改,我们再观察/proc/sys/kernel/random/entropy_avail
基本上在3000左右。我们可以测试一下随机数的生成速度
watch -n 1 cat /proc/sys/kernel/random/entropy_avail
观察这个值

新打开一个shell,用dd命令测试随机数。dd if=/dev/random of=random.dat count=40960

[root@localhost bin]# dd if=/dev/random of=random.dat count=40960记录了0+40960 的读入记录了6004+1 的写出3074362字节(3.1 MB)已复制,5.01017 秒,614 kB/秒

5秒产生了40960个随机数,/proc/sys/kernel/random/entropy_avail会有剧烈的变化,所有随机数产生之后它又会保持在3000左右。
选择哪种解决方法

个人建议选择第三种方式,熵池不仅仅Tomcat用,Linux下的所有应用程序产生随机数都会用到这个,所以不仅仅是Tomcat可能被阻塞。如果你搜索会发现Apache、Nginx、OpenSSL都被这个问题坑过。如果我们通过修改Java的配置来解决这个问题其实只是解决Java应用程序的问题,只能是治标不治本。根治的方法应该是通过rngd
提高随机数生成的速度。

    总结:当你发现一个没遇到过的问题,哪怕这个问题很简单,钻研下去你会发现很多精彩的东西,这些就是你的经验,就是你找一份好工作的优势资本。

猜你喜欢

转载自blog.csdn.net/chencaw/article/details/84291058