我们有一个使用javaws的Java Web应用程序。它将在Java 8更新40下运行正常,但在Java 8更新51下,jp2launcher.exe只是停止,而不启动应用程序。
我在C:\ Users \ me \ AppData \ LocalLow \ Sun \ Java \ Deployment \ log中找到了日志,但它们在j8u40和j8u51之间是相同的(当然除了加载了订单罐,jre版本和发射时间。)
我已经使用Process Monitor记录了两个jre版本的启动。在j8u51下,jp2launcher.exe只是以“SUCCESS”的形式退出。比较两个procmon日志,我不能发现任何异常。他们都翻阅了C:\ Users \ me \ AppData \ LocalLow \ Sun \ Java \ Deployment目录及其各自的C:\ Program Files \ Java \ jre1.8.0_XX \ lib目录等,但是j8u51只是一个退出。
Windows事件日志不显示与Java相关的任何内容。
我还有其他地方可以查找诊断信息吗?关于这里可能出现什么问题的任何建议?
更新:我已设法使用set "JAVAWS_VM_ARGS=-Xcheck:jni -XX:-TraceClassLoadingPreorder -XX:+PrintCommandLineFlags -verbose:jni -verbose:class -verbose:gc -XX:+PrintGCDetails -Djava.util.logging.config.file=C:\misc\logging.properties"
运行jnlp并记录stdout / stderr。它看起来像javaws和jp2launcher登录到输出,然后jre8u40和jre8u51版本都终止。据推测,在j8u40版本中,它正在启动另一个jp2launcher.exe来运行该应用程序。
比较两个输出日志不会引起任何兴趣。这些类以几乎相同的顺序加载,除了一些差异之外,大多数是相同的类,只需使用更新的类即可轻松解释。
进一步更新:我已经能够使用java.exe直接启动应用程序,方法是从服务器安装中获取客户端文件并将其解压缩。应用程序本身在jre8u51下运行正常,所以问题肯定在于javaws本身。
update3:清除缓存并不能解决问题。问题出现在不同的机器上,即使是全新的Java安装。
update4:作为一个实验,我刚刚在Ubuntu Linux下尝试过。我们的产品在技术上并不支持Linux,但我想我还是会尝试的。碰巧,行为是一样的!在jre8u40下,应用程序启动,而在jre8u51下则没有!
5:事实证明问题也发生在u45下,这是u40之后的更新。因此,原因似乎是在u45而不是u51中发生了变化。
答案 0 :(得分:0)
知道了!
这里有一些互动元素:
我目前的假设是JRE8u45 +有一个错误,它使用错误版本的VM参数。
我刚刚测试了一个带有1.6,1.7和1.8条目的自定义jnlp,其中1.6一个有vm args而1.7和1.8没有。
因此,似乎解决方法是从服务器端的jnlp中删除-XX:+ CMSIncrementalMode VM arg。