最近在用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

然后再重新运行,速度就飞快了。




Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐