首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MacOSX上的java7 SecureRandom性能

MacOSX上的java7 SecureRandom性能
EN

Stack Overflow用户
提问于 2013-07-15 11:35:49
回答 2查看 179关注 0票数 3

我在MacOSX Mavericks DP3上运行tomcat7和jdk7。一切都很顺利,只需要500毫秒就能启动。但是突然,它慢到了35秒。

日志消息显示SecureRandom是根本原因。感谢google,我发现这是一个jre错误,并使用以下代码进行验证:

代码语言:javascript
运行
复制
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上的块设备。

代码语言:javascript
运行
复制
cat /dev/random | hexdump -C

输出速度非常快!

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

事实上,不仅tomcat的速度明显减慢,Netbeans、glassfish都受到影响。苦苦挣扎了几个小时后,我终于放弃了。

今天早上,当我来到办公室,插上以太网,你猜发生了什么?它恢复了!

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

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-16 01:32:44

哈哈,解决了。获取InetAddress.java源代码(可以从集成开发环境复制);修改方法getLocalHost

代码语言:javascript
运行
复制
String local = impl.getLocalHostName();

至:

代码语言:javascript
运行
复制
String local = "localhost"; // impl.getLocalHostName();

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

已解决。

票数 1
EN

Stack Overflow用户

发布于 2013-12-23 03:35:37

不要更改InetAddress,其他代码可能会依赖它。而应将sun.security.provider.SeedGenerator::getSystemEntropy()更改为不使用本地ip地址。(这到底有多安全呢?)作为一个额外的奖励,您现在通过晦涩变得更加安全:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17646387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档