V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Antidictator
V2EX  ›  程序员

为何我的 Docker 运行 tomcat 奇慢——9 分钟

  •  
  •   Antidictator · 2017-02-20 11:39:19 +08:00 · 7317 次点击
    这是一个创建于 2829 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一个初始化的 tomcat7,jre7 ,但是 Deploy 自带的 examples 竟然要 9 分钟。

    Feb 20, 2017 3:02:28 AM org.apache.catalina.startup.HostConfig deployDirectory
    INFO: Deploying web application directory /usr/local/tomcat/webapps/examples
    Feb 20, 2017 3:11:45 AM org.apache.catalina.util.SessionIdGeneratorBase createSecureRandom
    INFO: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [555,272] milliseconds.
    Feb 20, 2017 3:11:45 AM org.apache.catalina.startup.HostConfig deployDirectory
    INFO: Deployment of web application directory /usr/local/tomcat/webapps/examples has finished in 557,089 ms
    Feb 20, 2017 3:11:45 AM org.apache.catalina.startup.HostConfig deployDirectory
    INFO: Deploying web application directory /usr/local/tomcat/webapps/manager
    Feb 20, 2017 3:11:45 AM org.apache.catalina.startup.HostConfig deployDirectory
    

    网上说是 sessionid 的问题,但是我不知道怎么设置非阻塞熵池策略。。

    http://i.imgur.com/MVVwkUN.png

    http://i.imgur.com/xQsAfEW.png

    但是9 分钟也太久了吧。请问怎么设置非阻塞熵池策略

    用的是腾讯云的学生机,最低的 1G 配置。 有知道的大触帮忙看一下呗。

    第 1 条附言  ·  2017-02-20 13:33:03 +08:00
    果然是 sessionId 的问题, ORZ.
    [有两种解决方法]( https://my.oschina.net/wangnian/blog/687914):
    第一种我试了一下没效果,所以用了第二种,直接 exec 进入 container 然后修改 securerandom.source 。
    效果显赫,2619ms :



    感谢 @zpf124 的热心回复。: P
    最后把镜像 commit 一下,需要的朋友就不用等待 n 分钟再自行修改了。
    需要[自取]( https://hub.docker.com/r/errorlife/tomcat/)
    11 条回复    2017-02-21 08:12:49 +08:00
    Antidictator
        1
    Antidictator  
    OP
       2017-02-20 11:41:09 +08:00
    [补一张完整的 log]( )
    zpf124
        2
    zpf124  
       2017-02-20 11:48:17 +08:00
    把那行生成安全的随机数的用时太长的日志 搜索一下 找到一个可能的答案。
    http://stackoverflow.com/questions/26431922/tomcat7-starts-too-late-on-ubuntu-14-04-x64-digitalocean/26432537#26432537
    Antidictator
        3
    Antidictator  
    OP
       2017-02-20 13:06:45 +08:00
    @zpf124 恩恩,貌似有两种解决方法:
    1 )在 Tomcat 环境中解决

    可以通过配置 JRE 使用非阻塞的 Entropy Source 。

    catalina.sh 中加入这么一行:-Djava.security.egd=file:/dev/./urandom 即可。

    加入后再启动 Tomcat ,整个启动耗时下降到 Server startup in 2912 ms 。

    2 )在 JVM 环境中解决

    打开$JAVA_PATH/jre/lib/security/java.security 这个文件,找到下面的内容:

    securerandom.source=file:/dev/random

    替换成

    securerandom.source=file:/dev/urandom

    from https://my.oschina.net/wangnian/blog/687914

    不过我 exec 进入 container 修改了 catalina.sh ,但是貌似效果不明显。
    第二种的话不知道怎么进入 JVM 环境
    amd00
        4
    amd00  
       2017-02-20 14:52:11 +08:00
    @Antidictator 既然用的 docker 那么在 build 的时候直接 dockerfile 里边 sed 修改就好了啊。或者 exec 也可以的吧
    Antidictator
        5
    Antidictator  
    OP
       2017-02-20 18:03:53 +08:00 via Android
    @amd00 试过了,会报错。有空我再研究下直接写在 dockerfile ,最后是用 exec 去里面改的
    raysonx
        6
    raysonx  
       2017-02-20 18:08:22 +08:00
    说一个可能相关的,曾经在虚拟机里运行一些软件时遇到过随机数熵值不够的问题,可以尝试安装 haveged 解决
    Antidictator
        7
    Antidictator  
    OP
       2017-02-20 18:14:37 +08:00 via Android
    @raysonx thx ,最后是改 Java path 搞定的
    Antidictator
        8
    Antidictator  
    OP
       2017-02-20 18:15:58 +08:00 via Android
    @raysonx 改了 securerandom.source
    salmon5
        9
    salmon5  
       2017-02-20 20:19:58 +08:00
    自己做的 KVM 和阿里云的基于 KVM 的虚机里会碰到该问题。阿里云基于 XEN 的没有碰到该问题。
    Antidictator
        11
    Antidictator  
    OP
       2017-02-21 08:12:49 +08:00 via Android
    @salmon5 是吗,我用的是腾讯云的学生机呢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2814 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 15:21 · PVG 23:21 · LAX 07:21 · JFK 10:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.