我在 MacOSX Mavericks DP3 上运行 tomcat7 和 jdk7。 一切顺利,启动仅需 500 毫秒。 但突然间,它减慢到 35 秒。
日志消息显示 SecureRandom 是根本原因。 感谢谷歌,我发现这是一个jre错误,并通过以下代码进行验证:
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 上的 block 设备。
cat /dev/random | hexdump -C
输出非常快!
当切换回 jre6 时,生成随机数的速度非常快。 下载最新的jdk8-ea,问题依旧。
事实上,不仅tomcat明显变慢,Netbeans、glassfish都受到影响。 挣扎了几个小时后,我终于放弃了。
今天早上,当我来到办公室时,插上了以太网,你猜怎么着? 它恢复了!
所以我的问题是,后面会发生什么?这真的很奇怪。
谢谢。
最佳答案
哈哈,解决了。 获取InetAddress.java源码(可以从IDE拷贝); 从
修改方法 getLocalHostString local = impl.getLocalHostName();
到:
String local = "localhost"; // impl.getLocalHostName();
重新编译,将java.net.InetAddress.class添加回JDK/jre/lib/rt.jar。
已解决。
关于macos - MacOS 上的 Java 7 SecureRandom 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17646387/