centos下面tomcat启动非常慢

本人一直开发安卓,头一次搭服务器~于是第一次倒腾centos。
于是就买了个最新的centos7.2的云主机,然后再加个Tomcat8搭建一个最最最基本的javaweb运行环境。
按照网上所有教程,一字不落的把环境搭起来了。
./startup.sh之后,就访问我的主页xxx.xxx.xxx.xxx:8080,我就看到 那个网页那个小圈一直再转啊,再转啊,快的能转五六分钟,慢的能转十几分钟都不能打开tomcat的默认页面 ,我就以为我的环境搭错了,重装系统,重新配置无数遍,也不好用。很崩溃。。。期间心酸不婊。
然后我使用下面的 [0x5]解决问题 B方法结局的问题。

最后终于找到如下原因,自己看吧,分享一下,希望新人别像我这样悲催的被折磨了一天一夜。
出处:https://webcache.googleusercontent.com/search?q=cache:C4oiQwHJY4EJ:https://hacpai.com/article/1479778148182%3Fp%3D1%26m%3D0+&cd=7&hl=en&ct=clnk&gl=jp
============以下内容引自如上连接的内容=====================================
CentOS7 下安装 Tomcat8 并且解决启动速度巨慢的问题
[0x0]介绍 Tomcat 的安装本身并没有什么复杂性,但是在启动的时候巨慢,运气不好卡个 3-5 分钟,所以这篇文章主要是为了记录解决巨慢的问题。
[0x1]环境介绍


  • CentOS7.0_x86-64
  • JDK1.8

[0x2]下载 Tomcat 的升级非常快,现在维持更新的有 7.x,8.0.x,8.5.x 和 9.x,每个版本对 JDK 的要求不一样,需要自己根据自己当时 JDK 环境选择不同的 Tomcat 版本。
我的服务器目前选择的是 Tomcat.8.0.38,要求 JDK7 以上,那么就下载吧,同样我已经下载好并且上传到微云了,有需要的可以直接下载。
[0x3]安装 & 启动
安装:Tomcat 的安装其实就是解压到一个目录就表示安装完成了。下面就是解压的命令。
[web@ebs-29770 ~]$ tar -zxf tomcat8.0.38-base.tar.gz 启动:进入刚刚解压的 Tomcat 目录,然后在进入 bin 目录,执行如下命令:
[web@ebs-29770 bin]$ ./startup.sh 下面是启动日志
[web@ebs-29770 tomcat8.0.38]$ ./bin/startup.shUsing CATALINA_BASE: /home/web/tomcat8.0.38Using CATALINA_HOME: /home/web/tomcat8.0.38Using CATALINA_TMPDIR: /home/web/tomcat8.0.38/tempUsing JRE_HOME: /apps/java/jdk/jdk1.8.0_112/jreUsing CLASSPATH: /home/web/tomcat8.0.38/bin/bootstrap.jar:/home/web/tomcat8.0.38/bin/tomcat-juli.jarTomcat started.[web@ebs-29770 tomcat8.0.38]$ tail -f logs/catalina.out14-Nov-2016 23:15:37.559 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argumenttemp14-Nov-2016 23:15:37.560 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent The APR based optimal performance in production environments was not found on the java.library.path: /usr/java/packages/lib/am14-Nov-2016 23:15:37.781 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]14-Nov-2016 23:15:37.803 INFO [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared14-Nov-2016 23:15:37.809 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["ajp-nio-8009"]14-Nov-2016 23:15:37.811 INFO [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared14-Nov-2016 23:15:37.815 INFO [main] org.apache.catalina.startup.Catalina.load Initialization processed in 902 m14-Nov-2016 23:15:37.866 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service Cat14-Nov-2016 23:15:37.866 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet Engi14-Nov-2016 23:15:37.878 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Dep/tomcat8.0.38/webapps/ROOT14-Nov-2016 23:20:42.357 INFO [localhost-startStop-1] org.apache.catalina.util.SessionIdGeneratorBase.createSecu for session ID generation using [SHA1PRNG] took [303,955] milliseconds.14-Nov-2016 23:20:42.389 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Dep/web/tomcat8.0.38/webapps/ROOT has finished in 304,510 ms14-Nov-2016 23:20:42.393 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]14-Nov-2016 23:20:42.400 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-8009"]14-Nov-2016 23:20:42.402 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 304587 ms
[0x4]启动巨慢问题分析 上面的 Tomcat 是刚下载解压出来的默认配置(只保留 Tomcat 自带),但根据上面的启动日志,竟然花了 3 分多钟,然后仔细观察日志,主要是卡在初始化 Session。开始我以为云服务器的问题,然后我在本地虚拟机上同样操作,问题重现,并且更换了 Tomcat7,问题仍然出现,所以。通过搜索和分析,Tomcat 的 SessionID 是通过 SHA1PRNG 算法计算得到的,SHA1 算法需要一个密钥,这个密钥在 Tomcat 启动的时候随机生成一个,生成是使用了 Linux 随机函数生成器/dev/random。读取它相当于生成随机数字。搜索/dev/random,大概知道是什么鬼了:/dev/random会根据 噪音 产生随机数,如果 不够它就会阻塞。Linux 是通过 I/O,键盘终端、内存使用量、CPU 利用率等方式来收集 的,如果 不够生成随机数的时候就会被 阻塞
[0x5]解决问题 解决上述问题有两个方案,一个使用伪随机函数生成器,另外一个加大/dev/random的熵池,下面分别介绍这两种方案。
A.使用伪随机函数生成器/dev/unrandom /dev/urandom并不是真正的随机行为(其实一般不容易重复),主要有两个地方可以修改。


  • 通过修改 Tomcat 启动文件 -Djava.security.egd=file:/dev/urandom
  • 通过修改 JRE 中的 java.security 文件 securerandom.source=file:/dev/urandom
B.增大/dev/random的熵池(推荐) 问题的原因是由于熵池不够大,所以增大它是最彻底的方法。我们可以通过软件的方法实现,下面是软件的安装和配置流程。


  • 安装熵服务
    yum install rng-tools
  • 启动熵服务
    systemctl start rngd
  • 如果你的 CPU 不支持 DRNG 特性或者像我一样使用虚拟机,可以使用/dev/unrandom来模拟。
    cp /usr/lib/systemd/system/rngd.service /etc/systemd/system vim /etc/systemd/system/rngd.service#以下是编辑内容ExecStart=/sbin/rngd -f -r /dev/urandom
  • 重新载入服务
    systemctl daemon-reloadsystemctl restart rngd
经过上面的修改,我们再观察 /proc/sys/kernel/random/entropy_avail 基本上在 3000 左右。这个时候重新启动 Tomcat,发现启动时间正常。
[0x6]总结 上面的 Tomcat 启动问题还是比较少见的,所以有时候不好找,所以专门做个笔记记录下。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


linux下开机自启: 在/etc/init.d目录下新建文件elasticsearch 并敲入shell脚本: 注意, 前两行必须填写,且要注释掉。 第一行为shell前行代码,目的告诉系统使用shell。 第二行分别代表运行级别、启动优先权、关闭优先权,且后面添加开机服务会用到。 shell脚本
1、因为在centos7中/etc/rc.d/rc.local的权限被降低了,所以需要赋予其可执行权 chmod +x /etc/rc.d/rc.local 2、赋予脚本可执行权限假设/usr/local/script/autostart.sh是你的脚本路径,给予执行权限 chmod +x /usr
最简单的查看方法可以使用ls -ll、ls-lh命令进行查看,当使用ls -ll,会显示成字节大小,而ls- lh会以KB、MB等为单位进行显示,这样比较直观一些。 通过命令du -h –max-depth=1 *,可以查看当前目录下各文件、文件夹的大小,这个比较实用。 查询当前目录总大小可以使用d
ASP.NET Core应用程序发布linux在shell中运行是正常的。可一但shell关闭网站也就关闭了,所以要配置守护进程, 用的是Supervisor,本文主要记录配置的过程和过程遇到的问题 安装Supervisor 1 yum install python-setuptools
设置时区(CentOS 7) 先执行命令timedatectl status|grep 'Time zone'查看当前时区,如果不是时区(Asia/Shanghai),则需要先设置为中国时区,否则时区不同会存在时差。 #已经是Asia/Shanghai,则无需设置 [root@xia
vim /etc/sysconfig/network-scripts/ifcfg-eth0 BOOTPROTO="static" ONBOOT=yes IPADDR=192.168.8.106 NETMASK=255.255.252.0 GATEWAY=192.168.
一、安装gcc依赖 由于 redis 是用 C 语言开发,安装之前必先确认是否安装 gcc 环境(gcc -v),如果没有安装,执行以下命令进行安装 [root@localhost local]# yum install -y gcc 二、下载并解压安装包 [root@localhost local
第一步 On CentOS/RHEL 6.*: $ sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el6/x86_64/nux-dextop-release-0-2.el6.nux.noarch.rpm On CentOS/RHEL 7: $
/// <summary> /// 取小写文件名后缀 /// </summary> /// <param name="name">文件名</param> /// <returns>返回小写后缀,不带“.”</ret
which nohup .bash_profile中并source加载 如果没有就安装吧 yum provides */nohup nohup npm run start & nohup ./kibana &
1.1 MySQL安装 1.1.1 下载wget命令 yum -y install wget 1.1.2 在线下载mysql安装包 wget https://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm 1.1.3 安装My
重启 reboot shutdown -r now init 6 关闭 init 0 shutdown -h now shutdown -h 20:25 #8点25关机查看内存 free CPU利用率 top 日期 date 设置时间 date 033017002015 #月日时间年 日历 cal
1、firewalld的基本使用 启动: systemctl start firewalld 关闭: systemctl stop firewalld 查看状态: systemctl status firewalld 开机禁用 : systemctl disable firewalld 开机启用 :
1 下载并安装MySQL官方的 Yum Repository wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm 使用上面的命令就直接下载了安装用的Yum Repository,大概
CentOS6.x CentOS6中转用Upstrat代替以前的init.d/rcX.d的线性启动方式。 一、相关命令 通过initctl help可以查看相关命令 [root@localhost ~]# initctl help Job commands: start Start job. sto
1、使用命令:df -lk 找到已满磁盘 2、使用命令:du --max-depth=1 -h 查找大文件,删除
ifconfig:查看网卡信息 网卡配置文件位置: /etc/sysconfig/network-scripts/文件夹 nmtui:配置网卡 netstat -tlunp:查看端口信息 端口信息存储位置: /etc/services文件 route:查看路由信息 wget:下载网路文件,例如 wg
ps -ef:查看所有进程, ps -ef |grap firewalld 查看与firewalld相关的进程 which :查看进程:which firewalld kill 进程id:杀掉进程 kill 640,强制杀:kill -9 640 man:查看帮助,例如 man ps 查看
useradd:添加用户 useradd abc,默认添加一个abc组 vipw:查看系统中用户 groupadd:添加组groupadd ccna vigr:查看系统中的组 gpasswd:将用户abc添加到ccna组 gpasswd -a abc ccna groups abc:查看用户abc属