我在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都受到影响。 经过几个小时的挣扎,我终于放弃了。
今天早上,当我上任时,插上以太网,猜猜是什么? 它恢复了!所以我的问题是,背后会发生什么?这真的很奇怪。
感谢。
答案 0 :(得分:1)
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地址。 (无论如何,这有多安全?)作为一个额外的奖励,你现在通过默默无闻地变得更加安全:)