我在linux debian squeez(6.0.4)上使用java build 1.6.0_29-b11运行glassfish v3.1.1 build 12。 我正在运行一个调用外部soap webservice的webapp。
偶尔jvm会崩溃。我可以通过同时执行20个线程来重现此崩溃。
hs_err_pid崩溃转储文件显示libdbus是有问题的库。这是崩溃转储的有趣部分
Stack: [0x00007f3fef0ff000,0x00007f3fef200000], sp=0x00007f3fef1f7058, free space=992k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C [libdbus-1.so.3+0x28de0]
Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j sun.net.spi.DefaultProxySelector.getSystemProxy(Ljava/lang/String;Ljava/lang/String;)Ljava/net/Proxy;+0
j sun.net.spi.DefaultProxySelector.access$100(Lsun/net/spi/DefaultProxySelector;Ljava/lang/String;Ljava/lang/String;)Ljava/net/Proxy;+3
j sun.net.spi.DefaultProxySelector$2.run()Ljava/lang/Object;+151
v ~StubRoutines::call_stub
J java.security.AccessController.doPrivileged(Ljava/security/PrivilegedAction;)Ljava/lang/Object;
j sun.net.spi.DefaultProxySelector.select(Ljava/net/URI;)Ljava/util/List;+273
j sun.net.www.protocol.http.HttpURLConnection.plainConnect()V+187
j sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect()V+9
j sun.net.www.protocol.http.HttpURLConnection.getOutputStream()Ljava/io/OutputStream;+134
j sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream()Ljava/io/OutputStream;+4
j com.sun.xml.ws.mex.client.HttpPoster.post(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/io/InputStream;+60
正如您所看到的那样,实际的HttpPoster.post被调用,然后发生崩溃。 sun.net.spi.DefaultProxySelector是rt.jar的一部分,所以这是默认的jvm安装的一部分。
我尝试了jdk7,但也发生了崩溃。
然后我安装了openjdk,它也崩溃了。
然后我安装了dbus-java,这是dbus的java实现(使用apt-get)。通常,此库仅在某些jar文件显式放在路径中时使用。但安装此库后,崩溃不再发生。所以看起来openjdk正在使用这个库(假设)
我和dbus-java的维护者交谈过,他也不知道sun jdk或openjdk正在使用dbus。所以我们都很困惑。
崩溃不再发生,但现在glassfish的管理界面停止工作。谷歌搜索显示这是一个已知的问题,解决方案是开始使用sun jdk。 Aaargh。
你以前见过这个问题吗?有解决方案吗?
更新:
DefaultProxySelector.getSystemProperty方法是在调用本机方法之前调用的最后一个方法。查看DefaultProxySelector的代码,我发现只有在java.net.useSystemProxies = true时才应该调用此方法。但是没有设置此属性(在jvm设置中没有-D设置),在$ JAVA_HOME / jre / lib / net.properties文件中也是如此。但是在调试之后它显示了这个布尔值是真的。
所以现在最大的问题是:为什么这个布尔值是真的?
更新2:
问题是由updatetool配置引起的。有关详细信息,请参阅bug report GLASSFISH-18360。