Centos7+Tomcat8配置javaweb环境,tomcat启动巨慢的问题

本文分析了Tomcat启动速度缓慢的原因,主要集中在初始化Session时的随机数生成问题。介绍了两种解决方案:一是修改Tomcat使用伪随机数生成器/dev/urandom;二是通过安装和配置熵服务rng-tools增加熵池大小,从而提高随机数生成效率。

去年刚开始遇到这样的问题很郁闷,总以为是服务器的问题,网上的也不好找到很好的答案,花了不少时间,现在感觉这样的问题多了网上的答案也随之很多

    启动巨慢问题分析:

启动慢主要是卡在初始化 Session,通过搜索和分析,Tomcat 的 SessionID 是通过 SHA1PRNG 算法计算得到的,SHA1 算法需要一个密钥,这个密钥在 Tomcat 启动的时候随机生成一个,生成是使用了 Linux 随机函数生成器/dev/random。读取它相当于生成随机数字。搜索/dev/random,大概知道是什么鬼了:/dev/random会根据 噪音 产生随机数,如果噪音不够它就会阻塞。Linux 是通过 I/O,键盘终端、内存使用量、CPU 利用率等方式来收集噪音的,如果噪音不够生成随机数的时候就会被阻塞

 

解决方案A和B

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-reload  systemctl restart rngd

经过上面的修改,我们再观察 /proc/sys/kernel/random/entropy_avail 基本上在 3000 左右。这个时候重新启动 Tomcat,发现启动时间正常。

 

这两种方案A自己没有试过,也是网上看的,我一般用的是B方案,安装熵服务和启动熵服务这两步操作就可以了,最好是在linux的根目录下操作

转载于:https://my.oschina.net/cz1011/blog/1512586

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值