# jvm产生取随机数在Linux下性能低下问题的解决方案

2016-07-13

# 问题描述

如果你有以下的现象,可以考虑是这个问题:

在linux下,如果你使用 Java.security 包中的方法(比如SecureKeyFactory.generateSecret()),会发现它出奇的慢,有时候甚至是半僵死在那里。 HTTPS加密时,建立连接有时候比较慢 建立oracle数据库连接比较慢 tomcat启动慢

# 方法1:修改java.security配置

有两个方法解决这个问题

  1. 编辑${java.home}/jre/lib/security/java.security,找到securerandom.source,把它的值改成(默认值file:/dev/urandom,效果很差)

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

请注意:这个增加./的方式,是因为jdk有bug(详情见这里: http://wiki.apache.org/tomcat/HowTo/FasterStartUp (opens new window) )(jdk bug : http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6521844 (opens new window) )

java_random_slow

# 方法2:安装rng-tools

[root@linux ~]# yum install rng-tools

[root@linux ~]# echo ‘EXTRAOPTIONS=”-i -o /dev/random -r /dev/urandom -t 10 -W 2048″‘ > /etc/sysconfig/rngd

[root@linux ~]# chkconfig rngd on

[root@linux ~]# service rngd restart

参考:http://development.adaptris.com/~lchan/blog/2012/06/15/slow-java-crypto-performance-on-linux/ (opens new window)

# 扩展阅读

/dev/urandom 不得不说的故事 http://www.tuicool.com/articles/2qMZZvV (opens new window)
本站备份

JVM上的随机数与熵池策略 http://ifeve.com/jvm-random-and-entropy-source/ (opens new window)