docker中安装的centos启动tomcat 非常慢解决方案
Posted 朱培
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker中安装的centos启动tomcat 非常慢解决方案相关的知识,希望对你有一定的参考价值。
最近在用docker部署部署应用,遇到的两个问题就是:
1、docker run 启动容器的时候,总是会强行Exited ,这个问题就是在启动时加上-it就可以了,例如
docker run -it -d -p 58080:8080 --name tomcat1 test/myweb:0.1 /root/run.sh
2、docker中安装的centos启动tomcat 非常慢。
在全部操作完成之后,端口也映射好了,但是外部死活访问不了,
然后登录到容器中查看tomcat的日志,发现一直在部署中,卡着不动,要好几分钟甚至十几分钟才启动完成,简直不可思议。
后来发现根本原因就在于 SecureRandom 这个 jre 的工具类的问题。那为什么 SecureRandom generateSeed 这么慢,甚至挂在 Linux 操作系统呢?Tomcat 7/8 都使用 org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom 类产生安全随机类 SecureRandom 的实例作为会话 ID。
SecureRandom generateSeed 使用 /dev/random 生成种子。但是 /dev/random 是一个阻塞数字生成器,如果它没有足够的随机数据提供,它就一直等,这迫使 JVM 等待。键盘和鼠标输入以及磁盘活动可以产生所需的随机性或熵。但在一个服务器缺乏这样的活动,可能会出现问题。
所以解决方案就是:直接改jdk的配置
打开jdk安装路径 $JAVA_PATH/jre/lib/security/java.security 这个文件,找到下面的内容:
securerandom.source=file:/dev/random
替换成:
securerandom.source=file:/dev/./urandom
然后再重新运行,速度就飞快了。
以上是关于docker中安装的centos启动tomcat 非常慢解决方案的主要内容,如果未能解决你的问题,请参考以下文章
docker环境搭建centos+jdk+tomcat_CENTOS篇