解决weblogic启动慢和创建域慢的方法

创建域慢启动慢的特征:创建域到70%时,进程长时间等待(命令行创建时停止在100%处),创建域启动Weblogic的时候也是长时间停止。 

Weblogic在Linux下启动慢的原因,发现从进程堆来看,线程挂在security相关的随机数生成上面,是由于JDK的Bug(JDK从/dev/random读取‘randomness’经常耗费10分钟或者更长的时间),查询了下相关资料,解决办法可以有如下三种办法: 

1)在weblogic启动脚本里setDomainEnv.sh: 加入以下内容

JAVA_OPTIONS="${JAVA_OPTIONS} -Djava.security.egd=file:/dev/./urandom"
export JAVA_OPTIONS

2)最差的解决办法:

执行命令

mv /dev/random /dev/random.ORIG

ln /dev/urandom /dev/random 

将/dev/random 指向/dev/urandom 

3)最好的解决办法:

修改Linux上Weblogic使用的jdk $JAVA_HOME/jre/lib/security/java.security 文件 

将
securerandom.source=file:/dev/urandom 
修改为 
securerandom.source=file:/dev/./urandom

这样可以解决任何一个域Weblogic启动慢的问题。 

此外由于Weblogic创建域的时候使用的JDK是自带的jrockit,所以要解决WebLogic在Linux上创建域慢的问题,解决办法如下: 修改Linux上Weblogic使用的jdk $JROCKIT_HOME/jre/lib/security/java.security 文件 

将securerandom.source=file:/dev/urandom 修改为 

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

由于Windows上对/dev/urandom实现机制不一样,所以在Windows上不会出现上述为题。 

知识点扩充

Linux中的随机数发生器:

在Linux操作系统中,有一个特殊的设备文件,可以用作随机数发生器或伪随机数发生器。

/dev/random

在读取时,/dev/random设备会返回小于熵池噪声总数的随机字节。/dev/random可生成高随机性的公钥或一次性密码本。若熵池空了,对/dev/random的读操作将会被阻塞,直到从别的设备中收集到了足够的环境噪声为止。

当然你也可以设置成不堵塞,当你在open 的时候设置参数O_NONBLOCK, 但是当你read的时候,如果熵池空了,会返回-1

/dev/urandom

/dev/random的一个副本是/dev/urandom ("unlocked",非阻塞的随机数发生器[4]),它会重复使用熵池中的数据以产生伪随机数据。这表示对/dev/urandom的读取操作不会产生阻塞,但其输出的熵可能小于/dev/random的。它可以作为生成较低强度密码的伪随机数生成器,不建议用于生成高强度长期密码。

Linux下设置随机数

/proc/sys/kernel/random

在此目录下,可以配置/dev/random的参数

在JAVA中的配置发生器

在JAVA中可以通过两种方式去设置指定的随机数发生器

1.      -Djava.security.egd=file:/dev/random或者 -Djava.security.egd=file:/dev/urandom

2.      修改配置文件java.security 在jvm_home\jre\lib\security

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

/dev/random 是堵塞的,在读取随机数的时候,当熵池值为空的时候会堵塞影响性能,尤其是系统大并发的生成随机数的时候,如果在随机数要求不高的情况下,可以去读取/dev/urandom

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值