MacOSX上的java7 SecureRandom性能

时间:2013-07-15 03:35:49

标签: macos random java-7

我在MacOSX Mavericks DP3上使用jdk7运行tomcat7。 一切顺利,启动只需500毫秒。 但突然间,它减慢到35秒。

日志消息显示SecureRandom是根本原因。 感谢谷歌,我发现它是一个jre bug,并按照代码验证:

import java.security.SecureRandom;
class JRand {
     public static void main(String args[]) throws Exception {
        System.out.println("Ok: " +
           SecureRandom.getInstance("SHA1PRNG").nextLong());
     }
}

是。最简单的代码也需要35秒。 但似乎所有相关的解决方案都不适合我。 / dev / random和/ dev / urandom都不是Mac上的块设备。

cat /dev/random | hexdump -C

输出很快!

当切换回jre6时,生成random的速度非常快。 下载最新的jdk8-ea,问题仍然存在。

事实上,不仅tomcat显着减速,Netbeans,glassfish都受到影响。 经过几个小时的挣扎,我终于放弃了。

今天早上,当我上任时,插上以太网,猜猜是什么? 它恢复了!

所以我的问题是,背后会发生什么?这真的很奇怪。

感谢。

2 个答案:

答案 0 :(得分:1)

哈哈,解决了。 获取InetAddress.java源代码(可以从IDE复制); 从

修改方法getLocalHost
String local = impl.getLocalHostName();

到:

String local = "localhost"; // impl.getLocalHostName();

重新编译它,并将java.net.InetAddress.class添加回JDK / jre / lib / rt.jar。

解决。

答案 1 :(得分:0)

不要更改InetAddress,其他代码可能依赖它。相反,将sun.security.provider.SeedGenerator :: getSystemEntropy()更改为不使用本地IP地址。 (无论如何,这有多安全?)作为一个额外的奖励,你现在通过默默无闻地变得更加安全:)