Centos环境下Tomcat启动缓慢

最近项目上线部署的时候,发现一个问题。Tomcat在启动过程中耗费了很长的时间。查看日志,发现耗时最长的地方是:

INFO [localhost-startStop-1] org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom Creation of SecureRandom instance for session ID gener

ation using [SHA1PRNG] took [1,693,533] milliseconds.

在网上查找资料后确定,该问题是由于tomcat的session id的生成主要通过java.security.SecureRandom生成随机数来实现,随机数算法使用的是”SHA1PRNG”。在sun/oracle的jdk里,这个算法的提供者在底层依赖到操作系统提供的随机数据,在linux上,与之相关的是/dev/random和/dev/urandom。有关它俩的描述如下:

/dev/random

在读取时,/dev/random设备会返回小于熵池噪声总数的随机字节。/dev/random可生成高随机性的公钥或一次性

密码本。若熵池空了,对/dev/random的读操作将会被阻塞,直到收集到了足够的环境噪声为止。

/dev/urandom

dev/random的一个副本是/dev/urandom (”unlocked”,非阻塞的随机数发生器),它会重复使用熵池中的数据

以产生伪随机数据。这表示对/dev/urandom的读取操作不会产生阻塞,但其输出的熵可能小于/dev/random的。它

可以作为生成较低强度密码的伪随机数生成器,不建议用于生成高强度长期密码。

在tomcat的文档里的建议,采用非阻塞的熵源(entropy source),通过java系统属性来设置:

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

这个系统属性egd表示熵收集守护进程(entropy gathering daemon),但这里值为何要在dev和random之间加一个点呢?是因为一个jdk的bug,在这个bug的连接里有人反馈及时对 securerandom.source 设置为 /dev/urandom 它也仍然使用的 /dev/random,有人提供了变通的解决方法,其中一个变通的做法是对securerandom.source设置为 /dev/./urandom 才行。也有人评论说这个不是bug,是有意为之。

我的最终解决方法如下:

找到 $JAVA_HOME/jre/lib/security/java.security 这个文件,找到里面的

securerandom.source=file:/dev/random

或者

securerandom.source=file:/dev/urandom

修改为

securerandom.source=file:/dev/./urandom

原文详情:http://www.roncoo.com/article/detail/125962

时间: 2024-11-08 19:12:59

Centos环境下Tomcat启动缓慢的相关文章

阿里云CentOS环境下tomcat启动超级慢的解决方案

1 为什么会出现这个问题 Tomcat在本地服务器跑,一切都正常,但部署到阿里云上,发现启动巨慢. 经过在网上搜索,找到了原因: Tomcat 7/8都使用org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom类产生安全随机类SecureRandom的实例作为会话ID,这里花去了342秒,也即接近6分钟. SHA1PRNG算法是基于SHA-1算法实现且保密性较强的伪随机数生成器. 在SHA1PRNG中,有一个种子产生器

linux环境下tomcat启动成功,请求页面出现404

这种情况很多,本文记录我遇到比较奇葩的情况. 第一次tomact启动成功,访问404,乱捣鼓不知怎么好了:第二次tomcat启动成功,可以访问部分链接,有些却报404,但是代码和数据都还是以前的,没有变.很奇怪! 经常同事指点,查清原因: 请求tomcat里的jsp,tomcat会自动在work目录下生产相关jsp文件,web访问的是work里的,而不是webapps里的.之所以出现我这种情况,是因为tomcat一开始是用一般用户启动的,请求了几个页面后再用root启动,再请求几个页面后又变成一

CentOS7.4 系统下 Tomcat 启动慢解决方法

CentOS7.4 系统下 Tomcat 启动慢解决的方法 首先查看日志信息,查看因为什么而启动慢 在CentOS7启动Tomcat时,启动过程很慢,需要几分钟,经过查看日志,发现耗时在这里:是session引起的随机数问题导致的.Tocmat的Session ID是通过SHA1算法计算得到的,计算Session ID的时候必须有一个密钥.为了提高安全性Tomcat在启动的时候会通过随机生成一个密钥. 22-Apr-2017 19:33:07.623 INFO [localhost-startS

Centos环境下手动设置-网络参数配置-网络挨排错顺序-

Linux中网络参数大致包含以下内容: IP地址 子网掩码 网关 DNS服务器 主机名(默认 localhost) 历来Linux系统中修改这些参数的方式通常有:命令.文件两种.其中通过命令设置可以立即生效但重启后将失效,通过文件修改实现永久生效,但不会立即生效. 首先我们来看看命令的方式:ifconfig:查看与设置IP地址.子网掩码hostname:查看与设置主机名route:     查看与设置路由信息(默认网关等) 通过文件的方式修改:/etc/sysconfig/network-scr

CentOS环境下R语言的安装和配置

最近在看数据统计和分析,想到了R语言,于是就着手在自己的CentOS环境下进行安装和配置.步骤如下: 1.前往R官网下载安装包. 2.解压压缩包:tar xvzf R-3.2.2.tar.gz 3.进行编译:./configure --prefix=/usr/local/rscript(--prefix的内容自定,这是R的安装目录) 注意:此过程中可能会出现以下错误: --with-readline=yes (default) and headers/libs are not available

附2、MDT 2013 Update 1 引导镜像LiteTouchPE_x64.ISO无法在EFI环境下无法启动的修改办法

附2.MDT 2013 Update 1 引导镜像LiteTouchPE_x64.ISO无法在VMWARE WORKSTATION 12 PRO的EFI环境下无法启动的修改办法 刚好碰到一个测试的机器,采用的是3T的硬盘,没有多想,习惯的利用MDT 2013 UPDATE 1进行部署,想不到部署过程中就报错,才想到传统的BIOS下启动,无法在大于2T的启动盘上安装WINDOWS系统. 于是想到EFI启动,还是先在MDT 2013 UPDATE 1的环境,利用VMWARE WORKSTATION

解决Centos 7 下 tomcat字体异常 Font '宋体' is not available to the JVM

错误提示: SEVERE: Servlet.service() for servlet [example] in context with path [/myproject] threw exception [Request processing failed; nested exception is net.sf.jasperreports.engine.util.JRFontNotFoundException: Font '宋体' is not available to the JVM. S

MyEclipse 下 Tomcat启动变慢如何解决

MyEclipse   下  Tomcat启动变慢如何解决 项目使用debug启动有时候会突然变得非常慢.不但启动慢,启动之后连打开项目页面也很慢,是日常的4,5倍.可以有下面的几种解决方法: 1. 由于Tomcat是服务器,部署好的工程就会一直驻留到服务器里,每次启动都会把部署到服务器里的工程全部启动,工程多了自然启动时间就慢,所以可以把以前的删除:tomcat安装目录\jakarta-tomcat-6.029webapps在   webapps  目录下把会看到以前的工程都删除了 2. 可能

Centos | Linux 下安装启动 mysql 出现 8618 [ERROR] Aborting,查看日志:Plugin 'FEDERATED' is disabled.

1.试试启动时指定配置文件 ./bin/mysqld_safe --defaults-file=mysql.cnf 或 ./bin/mysqld_safe --defaults-file=mysql.cnf $ 2.试试修改 mysql.cnf(也可能是my.cnf) 在 [mysqld]下指定tmpdir tmpdir = youTmpdir Centos | Linux 下安装启动 mysql 出现 8618 [ERROR] Aborting,查看日志:Plugin 'FEDERATED'