Tomcat之启动慢问题

1.  现象

    tomcat启用startup.sh之后,使用curl命令访问页面时,打不开。后查看catalina.out日志,发现启动很慢。

2.  原因

    在apache-tomcat官方文档:如何让tomcat启动更快里面提到了一些启动时的优化项,其中一项是关于随机数生成时,采用的“熵源”(entropy source)的策略。

    他提到tomcat7的session id的生成主要通过java.security.SecureRandom生成随机数来实现,随机数算法使用的是”SHA1PRNG”。    

    因为生成随机数的时间太长,导致tomcat启动时间也长。

3.  解决方法(三种方法)

    1.  通过修改bin/catalina.sh文件,加入一行:

        -Djava.security.egd=file:/dev/./urandom    

    2.  打开$JAVA_HOME/jre/lib/security/java.security文件,找到“securerandom.source=file:/dev/urandom”,并把它修改成“securerandom.source=file:/dev/./urandom”。(对所有使用JVM的应用生效)修改之后启动tomcat,启动速度就非常快。    

    3.  增大/dev/random的熵池

        1.  先查看当前的熵池大小

            cat /proc/sys/kernel/random/entropy_avail

        2.  要增大熵池的值,CPU要支持DRNG特性,可以充分利用硬件来提高熵池产生的速度,查看服务器是否支持DRNG特性

            cat /proc/cpuinfo | grep rdrand

        3.  安装rngd服务

            yum install -y rng-tools

        4.  启动rngd服务

            若CPU不支持DRNG特性或者使用虚拟机,则可以使用/dev/unrandom来模拟。

            1.  centos7

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

                编辑配置/etc/systemd/system/rngd.service文件,设置“ExecStart=/sbin/rngd -f -r /dev/urandom”

                systemctl daemon-reload

                systemctl restart rngd

            2.  centos6

                在/etc/sysconfig/rngd中,添加一行:

                EXTRAOPTIONS="--rng-device /dev/urandom"

                service rngd start

        5.  rngd服务启动后,查看一下熵池大小

            cat /proc/sys/kernel/random/entropy_avail                                         

posted @ 2023-04-25 14:42  奋斗史  阅读(1304)  评论(0)    收藏  举报