Java 1.6 -> 1.7 JNLP = SIGSEGV

Java 1.6 -> 1.7 JNLP = SIGSEGV

当我尝试在 Red Hat Enterprise Linux Server release 6.4 (Santiago) 应用程序 Java 1.6(1.6.0_36 ) 中 运行 JNLP 时,我得到:

[wojtek@rcmtex05 ~]$ strace -e open
 /opt/tex/lib/java/jdk1.6.0_35/bin/javaws
 /tmp/app.jnlp >> 
 /home/wojtek/6.txt open("/etc/ld.so.cache", O_RDONLY)      = 3
 open("/usr/lib64/libX11.so.6", O_RDONLY) = 3
 open("/lib64/libnsl.so.1", O_RDONLY)    = 3 open("/lib64/libc.so.6",
 O_RDONLY)      = 3 open("/lib64/libdl.so.2", O_RDONLY)     = 3
 open("/usr/lib64/libxcb.so.1", O_RDONLY) = 3
 open("/usr/lib64/libXau.so.6", O_RDONLY) = 3
 open("/etc/nsswitch.conf", O_RDONLY)    = 3 open("/etc/ld.so.cache",
 O_RDONLY)      = 3 open("/lib64/libnss_files.so.2", O_RDONLY) = 3
 open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 3
 open("/home/wojtek/.java/deployment/deployment.properties", O_RDONLY)
 = 3 open("/usr/lib/locale/locale-archive", O_RDONLY) = 3 open("/usr/lib64/gconv/gconv-modules.cache", O_RDONLY) = 3

但是当我尝试 运行 与 Java 1.7 (1.7.0_65-b17 ) 相同的应用程序时,结果是不同的:

[wojtek@rcmtex05 ~]$ strace -e open
 /opt/tex/lib/java/jdk1.7.0_65/bin/javaws
 /tmp/app.jnlp
 open("/etc/ld.so.cache", O_RDONLY)      = 3
 open("/usr/lib64/libX11.so.6", O_RDONLY) = 3
 open("/lib64/libnsl.so.1", O_RDONLY)    = 3 open("/lib64/libdl.so.2",
 O_RDONLY)     = 3 open("/lib64/libm.so.6", O_RDONLY)      = 3
 open("/lib64/libc.so.6", O_RDONLY)      = 3
 open("/usr/lib64/libxcb.so.1", O_RDONLY) = 3
 open("/usr/lib64/libXau.so.6", O_RDONLY) = 3
 open("/etc/nsswitch.conf", O_RDONLY)    = 3 open("/etc/ld.so.cache",
 O_RDONLY)      = 3 open("/lib64/libnss_files.so.2", O_RDONLY) = 3
 open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 3 open("/etc/localtime",
 O_RDONLY)        = 3 open("/etc/ld.so.cache", O_RDONLY)      = 3
 open("/usr/lib64/libgtk-x11-2.0.so.0", O_RDONLY) = 3
 open("/usr/lib64/libgdk-x11-2.0.so.0", O_RDONLY) = 3
 open("/usr/lib64/libgdk_pixbuf-2.0.so.0", O_RDONLY) = 3
 open("/usr/lib64/libpangocairo-1.0.so.0", O_RDONLY) = 3
 open("/usr/lib64/libXfixes.so.3", O_RDONLY) = 3
 open("/usr/lib64/libatk-1.0.so.0", O_RDONLY) = 3
 open("/usr/lib64/libcairo.so.2", O_RDONLY) = 3
 open("/lib64/libgio-2.0.so.0", O_RDONLY) = 3
 open("/usr/lib64/libpangoft2-1.0.so.0", O_RDONLY) = 3
 open("/usr/lib64/libpango-1.0.so.0", O_RDONLY) = 3
 open("/usr/lib64/libfontconfig.so.1", O_RDONLY) = 3
 open("/lib64/libgobject-2.0.so.0", O_RDONLY) = 3
 open("/lib64/libgmodule-2.0.so.0", O_RDONLY) = 3
 open("/lib64/libglib-2.0.so.0", O_RDONLY) = 3
 open("/usr/lib64/libXext.so.6", O_RDONLY) = 3
 open("/usr/lib64/libXrender.so.1", O_RDONLY) = 3
 open("/usr/lib64/libXinerama.so.1", O_RDONLY) = 3
 open("/usr/lib64/libXi.so.6", O_RDONLY) = 3
 open("/usr/lib64/libXrandr.so.2", O_RDONLY) = 3
 open("/usr/lib64/libXcursor.so.1", O_RDONLY) = 3
 open("/usr/lib64/libXcomposite.so.1", O_RDONLY) = 3
 open("/usr/lib64/libXdamage.so.1", O_RDONLY) = 3
 open("/usr/lib64/libpng12.so.0", O_RDONLY) = 3
 open("/usr/lib64/libfreetype.so.6", O_RDONLY) = 3
 open("/usr/lib64/libpixman-1.so.0", O_RDONLY) = 3
 open("/lib64/libz.so.1", O_RDONLY)      = 3
 open("/lib64/libresolv.so.2", O_RDONLY) = 3
 open("/lib64/libselinux.so.1", O_RDONLY) = 3
 open("/lib64/libexpat.so.1", O_RDONLY)  = 3
 open("/usr/lib/locale/locale-archive", O_RDONLY) = 3
 open("/usr/share/locale/locale.alias", O_RDONLY) = 3
 open("/usr/share/locale/en_US.UTF-8/LC_MESSAGES/messages.mo",
 O_RDONLY) = 3 open("/usr/lib64/gconv/gconv-modules.cache", O_RDONLY) =
 3 open("/usr/share/locale/en_US.UTF-8/LC_MESSAGES/gtk20.mo", O_RDONLY)
 = 3 open("/usr/share/locale/en_US.utf8/LC_MESSAGES/gtk20.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
 open("/usr/share/locale/en_US/LC_MESSAGES/gtk20.mo", O_RDONLY) = -1
 ENOENT (No such file or directory)
 open("/usr/share/locale/en.UTF-8/LC_MESSAGES/gtk20.mo", O_RDONLY) = -1
 ENOENT (No such file or directory)
 open("/usr/share/locale/en.utf8/LC_MESSAGES/gtk20.mo", O_RDONLY) = -1
 ENOENT (No such file or directory)
 open("/usr/share/locale/en/LC_MESSAGES/gtk20.mo", O_RDONLY) = -1
 ENOENT (No such file or directory)
 open("/usr/share/X11/locale/locale.alias", O_RDONLY) = 3
 open("/usr/share/X11/locale/locale.alias", O_RDONLY) = 3
 open("/usr/share/X11/locale/locale.dir", O_RDONLY) = 3
 open("/usr/share/X11/locale/en_US.UTF-8/XLC_LOCALE", O_RDONLY) = 3
 open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 3
 open("/usr/share/locale/en_US.UTF-8/LC_MESSAGES/gtk20-properties.mo",
 O_RDONLY) = 3
 open("/usr/share/locale/en_US.utf8/LC_MESSAGES/gtk20-properties.mo",
 O_RDONLY) = -1 ENOENT (No such file or directory)
 open("/usr/share/locale/en_US/LC_MESSAGES/gtk20-properties.mo",
 O_RDONLY) = -1 ENOENT (No such file or directory)
 open("/usr/share/locale/en.UTF-8/LC_MESSAGES/gtk20-properties.mo",
 O_RDONLY) = -1 ENOENT (No such file or directory)
 open("/usr/share/locale/en.utf8/LC_MESSAGES/gtk20-properties.mo",
 O_RDONLY) = -1 ENOENT (No such file or directory)
 open("/usr/share/locale/en/LC_MESSAGES/gtk20-properties.mo", O_RDONLY)
 = -1 ENOENT (No such file or directory) open("/home/wojtek/.Xauthority", O_RDONLY) = 4
 open("/etc/gtk-2.0/gtkrc", O_RDONLY)    = 4
 open("/home/wojtek/.Xdefaults-rcmtex05", O_RDONLY) = -1 ENOENT (No
 such file or directory) open("/usr/share/themes/Slider/gtk-2.0/gtkrc",
 O_RDONLY) = 4
 open("/usr/lib64/gtk-2.0/2.10.0/engines/libclearlooks.so", O_RDONLY) =
 5 open("/usr/share/locale/en_US.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY)
 = 5 open("/usr/share/locale/en_US.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory) open("/usr/share/locale/en_US/LC_MESSAGES/libc.mo", O_RDONLY) = -1
 ENOENT (No such file or directory)
 open("/usr/share/locale/en.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1
 ENOENT (No such file or directory)
 open("/usr/share/locale/en.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1
 ENOENT (No such file or directory)
 open("/usr/share/locale/en/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT
 (No such file or directory)
 open("/usr/share/themes/Default/gtk-2.0-key/gtkrc", O_RDONLY) = 4
 open("/usr/lib64/gtk-2.0/modules/libpk-gtk-module.so", O_RDONLY) = 4
 open("/etc/ld.so.cache", O_RDONLY)      = 4
 open("/usr/lib64/libdbus-glib-1.so.2", O_RDONLY) = 4
 open("/lib64/libdbus-1.so.3", O_RDONLY) = 4
 open("/lib64/libpthread.so.0", O_RDONLY) = 4 open("/lib64/librt.so.1",
 O_RDONLY)     = 4
 open("/usr/lib64/gtk-2.0/modules/libcanberra-gtk-module.so", O_RDONLY)
 = 4 open("/etc/ld.so.cache", O_RDONLY)      = 4 open("/usr/lib64/libcanberra-gtk.so.0", O_RDONLY) = 4
 open("/lib64/libgthread-2.0.so.0", O_RDONLY) = 4
 open("/usr/lib64/libcanberra.so.0", O_RDONLY) = 4
 open("/usr/lib64/libvorbisfile.so.3", O_RDONLY) = 4
 open("/usr/lib64/libvorbis.so.0", O_RDONLY) = 4
 open("/usr/lib64/libogg.so.0", O_RDONLY) = 4
 open("/usr/lib64/libtdb.so.1", O_RDONLY) = 4
 open("/usr/lib64/libltdl.so.7", O_RDONLY) = 4
 open("/lib64/libcrypt.so.1", O_RDONLY)  = 4
 open("/lib64/libfreebl3.so", O_RDONLY)  = 4
 --- SIGSEGV (Segmentation fault) @ 0 (0) ---
 +++ killed by SIGSEGV (core dumped) +++ Segmentation fault (core dumped)

为什么 java 1.7 尝试加载这么多不同的新文件?

和 gdb 结果:

(gdb) exec-file /opt/tex/lib/java/jdk1.7.0_71/bin/javaws (gdb) set args /tmp/app.jnlp (gdb) run Starting program: /opt/tex/lib/java/jdk1.7.0_71/bin/javaws /tmp/app.jnlp

>      Program received signal SIGSEGV, Segmentation fault. 0x00000036f85683d0 in gtk_message_dialog_format_secondary_text () from
> /usr/lib64/libgtk-x11-2.0.so.0 Missing separate debuginfos, use: 
> debuginfo-install XXX-JDK-1.7.0_71-07.x86_64 (gdb)

JNLP 文件如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="no"?><jnlp codebase="xxx" spec="6.0+">

  <information>
    <title>xxx</title>
    <vendor>xxx</vendor>
    <description>xxx.</description>

  </information>

  <security>
    <all-permissions/>
  </security>
  <update check="timeout" policy="always"/>
  <resources><extension href="file:////tmp/jvmconnector.jnlp" name="jvmconnector"/><extension href="file:////tmp/swinglibrary.jnlp" name="swinglibrary"/><extension href="file:////tmp/swinglibraryextension.jnlp" name="swinglibraryextension"/>
    <j2se max-heap-size="512m" version="1.7"/>
    <j2se max-heap-size="512m" version="1.6"/>


    <jar href="xxx-app.jar" main="false"/>
    <jar href="yy-xxx-app.jar" main="false"/>
    <jar href="xxx-yyyy.jar" main="false"/>
    <jar href="xx-zzzz.jar" main="false"/>

    <extension xmlns:cm="xxx.xs" href="https://xxx.jnlp" name="xxx"/>

    <property xmlns:pl="http://xxx.xs" name="xxx.AppURL" value="https://xxx"/>
<property name="xxx.UserName" value="xxx"/>
<extension href="xxx/client.jnlp" name="xxx"/>

    <extension href="xxx/client.jnlp" name="IBM WS7 JWS"/>
<property name="xxx.httpsession.id.LtpaToken2.name" value="LtpaToken2"/>
<property name="xxx.id.LtpaToken2.path" value="/"/>
<property name="xxx.httpsession.id.JSESSIONID.name" value="JSESSIONID"/>
<property name="xxx.httpsession.id.JSESSIONID.path" value="/"/>
<property name="xxx.sysprops.url" value="https://xxx/sys-cert-ssl.properties"/>
<property name="jnlp.java.naming.provider.url" value="{$corbaloc:iiop:xxx:9810}"/>

    <extension xmlns:mp="http://xxx.xs" href="xxx.jnlp" name="Mercury Client Libs"/>

    <extension xmlns:nl="http://xxx.xs" href="xxx.jnlp"/>


    <property name="xxx" value="xxx"/>
    <property name="jnlp.com.ibm.CORBA.Debug.Output" value="nul"/>
  </resources>

  <application-desc main-class="RMILauncher"><argument>/tmp/RMIStartswingLibrary2015-06-08-12-24-5633.xml2682499309750982226.xml</argument><argument>xxx</argument>
    <argument>-appbase</argument>
    <argument>xxx-app.jar</argument>

    <argument>-xxx</argument>

    <argument>-startapp</argument>
    <argument>xxx.Application</argument>
    <argument>-Pxxx.id.JSESSIONID=xxx</argument><argument>-xxx.LtpaToken2=xxx</argument><argument>-Pxx.id.LtpaToken=</argument>
  </application-desc>

</jnlp>

解决方案是:将任何参数添加到 javaws(例如 -J 或 -Verbose)。

https://superuser.com/questions/854293/java-web-start-seg-faults-when-run-with-no-arguments