我在MacOSX Mavericks DP3上运行tomcat7和jdk7。一切都很顺利,只需要500毫秒就能启动。但是突然,它慢到了35秒。
日志消息显示SecureRandom是根本原因。感谢google,我发现这是一个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上的块设备。
cat /dev/random | hexdump -C输出速度非常快!
当切换回jre6时,生成随机数的速度非常快。下载最新的jdk8-ea,问题仍然存在。
事实上,不仅tomcat的速度明显减慢,Netbeans、glassfish都受到影响。苦苦挣扎了几个小时后,我终于放弃了。
今天早上,当我来到办公室,插上以太网,你猜发生了什么?它恢复了!
所以我的问题是,背后发生了什么?真的很奇怪。
谢谢。
发布于 2013-07-16 01:32:44
哈哈,解决了。获取InetAddress.java源代码(可以从集成开发环境复制);修改方法getLocalHost
String local = impl.getLocalHostName();至:
String local = "localhost"; // impl.getLocalHostName();重新编译它,并将java.net.InetAddress.class添加回JDK/jre/lib/rt.jar。
已解决。
发布于 2013-12-23 03:35:37
不要更改InetAddress,其他代码可能会依赖它。而应将sun.security.provider.SeedGenerator::getSystemEntropy()更改为不使用本地ip地址。(这到底有多安全呢?)作为一个额外的奖励,您现在通过晦涩变得更加安全:)
https://stackoverflow.com/questions/17646387
复制相似问题