Ant signjar任务花费太长时间戳

时间:2014-04-22 08:14:50

标签: java ant timestamp jarsigner

我正在使用Hudson构建一个项目。我有几个jar文件,我想使用Ant SignJar任务使用时间戳签名。当没有时间戳时,它就像一个魅力 - 一个文件大约需要2-3秒。当我添加' tsaurl'属性为SignJar任务。然后时间戳为一个文件占用几分钟。我试图使用不同的时间戳服务器,它没有帮助。有人知道为什么要花这么多时间吗?首先,有什么方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:4)

我使用jarsign花费太长时间(至少在Linux上)的主要问题是内核熵池干涸了。此时,该过程将阻塞,直到更多熵到达。这会导致您看到坐在那里的jarsigner进程没有占用CPU时间但也没有做太多的症状。

在某些时候(从1.5到1.6 AFAIK),Java从使用/dev/urandom转到/dev/random。真正的熵实际上是现代计算机上的稀缺资源 - 大量RAM会减少磁盘活动,缓存内容的智能程序会减少网络活动。我告诉我,在虚拟机上(就像许多构建服务器一样),熵收集率甚至可以更低。

你可以

  • 将Java重新配置为使用/dev/urandom(如果您不是偏执狂)
  • 部署一种将额外熵注入/dev/random
  • 的方法

我选择了选项B:我为我选择的发行版(Ubuntu)安装了randomsound包。这样可以对你的麦克风进行采样,并在干燥时使用它将熵注入/dev/random。这方面的主要缺点是它阻止麦克风用于其他用途。还有其他方法可以获得额外的熵,例如将磁盘复制到/dev/null,或者执行包更新(大量磁盘和网络流量)。您可能希望使用硬件RNG将一台或多台服务器打包出去,并安装可以为其他服务器提供熵即服务的服务。或者甚至USB声卡和randomsound都能正常工作(在服务器机房中有很多白色声音......)

对于选项A,您可以设置属性

-Djava.security.egd=file:/dev/./urandom

(请注意额外的点 - 这是为了解决一个"智能"代码假设你想要/dev/random,即使你不这样说:见:{{3 }})