每次Java更新时,web启动jarvalidation都会变慢

我们有一个90MB的(Eclipse RCP)应用程序,带有139个自签名jar,在没有Web Start的情况下从8s开始,在Java7的旧版本中以10s开始。我们将Java配置为不使用浏览器代理,即deployment.proxy.type = 0

随着每次更新Oracle的Java启动性能下降。 完全启动需要花费越来越多的时间:

  • 7u60 / 7u65 / 8u25:13s(网络启动处理5s后开始)
  • 7u75:23s
  • 8u31:20s
  • 8u40:29s
  • 8u51 / 8u60ea:32s

我该怎么做才能解决这个问题?

从跟踪/日志中我可以看到,这种减速很可能完全是由于validation缓存的jar需要更多时间。 请注意, 此问题类似,但未提供以下详细信息:

诊断:

  • 缓存时,更新检查仅运行0.5秒(服务器返回“304 Not Modified”),但即使完全下载,千兆网络也只需几秒钟。
  • 更新检查后,每个jar XXX都有一个日志条目:

validation缓存的jar XXX.jar

完成后,启动com.sun.javaws.Main,之后相同的validation似乎再次发生并花费大约相同的时间,然后应用程序启动。

  • validation缓存jar所花费的时间似乎与应用程序启动前所需的额外时间相对应。
  • Web启动启动屏幕始终显示与更新检查相对应的约2秒,然后隐藏。 几乎20秒后,Java控制台终于出现,我的应用程序实际启动了。
  • 在延迟期间,jp2launcher.exe在具有超线程(8个逻辑核心)的四核上使用大约16%的处理器时间。 所以看起来它完全使用了一个逻辑处理器。

我已经尝试但没有任何区别:

  • 清除Web启动缓存(无数次)
  • 配置deployment.properties以禁用证书吊销检查(以及blacklist.check和validation.ocsp,validation.crl)
  • 离线运行
  • 使用版本下载协议
  • 添加到站点例外列表
  • 检查Web服务器日志中的问题。 没有找到,所有138个jar子的更新检查大约500毫秒。
  • 使用另一个Web服务器
  • 检查证书到期日2016年2月17日
  • 用JaNelavalidation了我的jnlp,发现没有严重的问题
  • 创建部署规则集以允许应用程序运行未签名以加快validation。 这应该是可能的,看起来像是一种很有前途的方法来解决这个问题,但我无法让它发挥作用。 另见我对这篇文章的回答。
  • 将Java配置为“不启动控制台”

细节:7u60上的一些奇怪的行为在7u60中,应用程序在大约5秒后启动,之后Java控制台APPEARS在应用程序启动时在后台进行jarvalidation。 但是.log文件报告在完成所有validation后应用程序启动。 它将此报告为25秒,然后显示我的应用程序的第一个System.out,它实际上仅在5秒钟后发生。 它还显示服务器的jar更新检查时间是服务器报告的10倍。 所以我想这是日志框架滞后的问题! 在8u51上没见过这个。

本身不是答案(但是),但我发现启用跟踪时Java 8u25只生成一个跟踪文件。 8u51生成两个文件,一个来自用于更新应用程序的JVM,另一个用于运行它。 这是新的(两个JVM初创公司),我认为这与使用本机Windows沙箱function的新设置有关。 问题是它不应该在第二个JVM上再次validation签名。 无论是否禁用使用本机沙箱的设置(默认设置),都会发生两个JVM实例的分离。

我报告了一个回归错误,如果我从Oracle得到答案,我会编辑答案。

注意:Java 8u31仍然可以在一个JVM上运行所有内容,但问题所述的启动时间相同。