Tomcat 7中更快的随机生成器

时间:2011-09-26 12:09:04

标签: java tomcat

我遇到的问题是Tomcat 7在启动时速度非常慢。我在日志文件中找到了这个:

INFO: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [12,367] milliseconds.

安全性很重要,当然,但不是在我的开发机器上。我完全可以使用标准的快速随机数发生器。所以我不需要这种非常慢的SecureRandom实现。

问题是:如何禁用它?搜索了一个解决方案,但只找到了一些关于randomClass属性的弃用信息,可以将其设置为java.util.Random。我还发现这个属性现在似乎在Tomcat 7中被命名为secureRandomClass。我试图将它设置为java.util.Random但是这会失败,因为Tomcat 7将对象强制转换为java.util.SecureRandom(并且它是还记录了指定的类必须扩展java.util.SecureRandom,因此不再可能使用java.util.Random。)

那么如何摆脱这个非常慢的随机数生成器启动,以便我的开发tomcat尽可能快地启动/重启?

6 个答案:

答案 0 :(得分:13)

根据TomCat Wiki,您可以使用非阻塞熵源:

"有一种方法可以通过设置以下系统属性来配置JRE以使用非阻塞熵源:-Djava.security.egd=file:/dev/./urandom"

答案 1 :(得分:5)

您可能需要在服务器上安装 Haveged

Tomcat正在使用 SecureRandom 在启动时生成安全ID,而SecureRandom正在使用 / dev / random / dev / urandom 生成随机数。

在一些无头的linux环境中, / dev / random 熵池可能会产生低质量的随机性,并且在生成随机数时反应非常慢。

有一篇很好的文章解释 Haveged 如何解决这个问题。

how-to-setup-additional-entropy-for-cloud-servers-using-haveged

答案 2 :(得分:2)

您可能需要修补Tomcat。

虽然作为一个hack,你总是可以尝试使用包装标准java.util.Random实例的东西扩展java.util.SecureRandom .......这至少会超过强制转换问题。

另一个想法......减速可能是由于耗尽的熵池造成的?你可能想尝试在池中获得更多的熵,这可能会让它变得非常快。

答案 3 :(得分:2)

securerandom.source=...文件中找到$JAVA_PATH/jre/lib/security/java.security并将其更改为securerandom.source=file:/dev/./urandom

https://stackoverflow.com/a/26432537/450586

答案 4 :(得分:1)

旧问题,但仍然存在......在我的情况下使用嵌入式Tomcat。

lsof解决方案对我不起作用。所以我用Google搜索了animate.css,但在使用/dev/random进行了一些测试之后,显然解决方法不再适用了。快速understanding the issue确认当前实现忽略了此系统属性。

问题是apt-get install rng-tools rngd -r /dev/urandom # Run once during system start up 上的Tomcat阻塞,所以我找到了向系统添加熵的方法,并找到了look at the code哪个工作得很好!在Debian中作为root:< / p>

custom-search-box

它可能不是超级安全的,但在我看来,这对于会话ID生成来说已经足够了。

顺便说一句,我最终使用了Jetty。如果你不需要Tomcat的所有功能,那就快得多。

答案 5 :(得分:0)

如果您的硬件支持,请尝试使用Java RdRand Utility: http://code.google.com/p/lizalab-rdrand-util/

它基于英特尔的RDRAND指令,速度比SecureRandom快10倍,大容量实现没有带宽问题。

完全披露,我是该实用程序的作者。