我正在用Hudson建立一个项目。我有几个jar文件,我想使用Ant SignJar任务用时间戳签名。当没有时间戳的时候,它就像一种魅力--一个文件大约需要2-3秒。当我将'tsaurl‘属性添加到SignJar任务时,就会出现问题。然后,时间戳需要几分钟的时间来处理一个文件。我尝试使用不同的时间戳服务器,但没有帮助。有人知道为什么要花这么多时间吗?首先,有没有办法解决这个问题?
发布于 2015-01-07 12:12:44
我花了太长时间(至少在Linux上)所遇到的主要问题是内核熵池枯竭。在这一点上,过程阻塞,直到更多的熵到来。这导致了您所看到的jarsigner进程的症状,它坐在那里,没有占用CPU时间,但也没有做太多事情。
在某种程度上(从1.5AFAIK到1.6AFAIK),Java从使用/dev/urandom
到/dev/random
。在现代计算机上,真正的熵实际上是一种稀缺的资源--大量的RAM减少了磁盘活动,缓存东西的智能程序减少了网络活动。我被告知,在虚拟机上(像许多构建服务器一样),熵收集率可能更低。
你可以
/dev/urandom
(如果您不是偏执狂)/dev/random
中注入附加熵的方法我选择了选项B:我为我选择的发行版(Ubuntu)安装了randomsound
包。这为您的话筒采样白花,并使用它注入熵的/dev/random
时,它运行干涸。这样做的主要缺点是阻止麦克风用于其他用途。还有其他获得额外熵的方法,比如将磁盘复制到/dev/null
,或者执行包更新(大量磁盘和网络流量)。您可能希望使用硬件RNG将一个或多个服务器打包,并安装一些可以为其他服务器提供服务熵的设备。或者即使是一个USB声卡和randomsound
也能工作(在服务器房间里有大量的whitenoise )。
对于选项A,可以设置属性
-Djava.security.egd=file:/dev/./urandom
(注意额外的点-这是为了解决“聪明”的代码,假设你想要/dev/random
,即使你没有这样说:见:https://bugs.openjdk.java.net/browse/JDK-6202721 )
https://stackoverflow.com/questions/23214082
复制相似问题