Сбой Glassfish, вызванный libdbus при сжатии Debian - PullRequest
4 голосов
/ 14 февраля 2012

Я использую Glassfish v3.1.1 build 12 с использованием java build 1.6.0_29-b11 на Linux Debian Squeez (6.0.4). Я запускаю веб-приложение, которое вызывает внешний мыльный веб-сервис.

Время от времени сбой 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, который является java-реализацией dbus (используя apt-get). Обычно эта библиотека используется только тогда, когда определенные JAR-файлы явно указаны в пути. Но после установки этой библиотеки сбои больше не происходят. Похоже, openjdk использует эту библиотеку (допущение)

Я говорил с сопровождающим dbus-java, а также он не знает, что sun jdk или openjdk использует dbus. Так что мы оба в замешательстве.

Сбои больше не происходят, но теперь интерфейс администратора Glassfish перестает работать. Поиск в Google показывает, что это известная проблема, и решение состоит в том, чтобы начать использовать Sun JDK. Aaargh.

Вы видели эту проблему раньше? Есть ли решение?

UPDATE:

метод DefaultProxySelector.getSystemProperty является последним методом, вызываемым перед вызовом собственного метода. Глядя на код DefaultProxySelector, я обнаружил, что этот метод следует вызывать только в том случае, если java.net.useSystemProxies = true. Но это свойство не установлено (без настройки -D в настройках jvm) и не верно в файле $ JAVA_HOME / jre / lib / net.properties. Но после отладки он показывает, что это логическое значение истинно.

Итак, большой вопрос сейчас: почему это логическое значение истинно?

ОБНОВЛЕНИЕ 2:

Проблема была вызвана конфигурацией updatetool. Подробнее см. отчет об ошибке GLASSFISH-18360 .

...