Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-6326935

Exception message's size is more than doubled everytime an exception is thrown

XMLWordPrintable

    • b01
    • sparc
    • solaris_9

        This is a customer escalation 1-11839641, case # 64729037.

        This is likely a bug in the hotspot optimisation. The testcase generates repeated
        NULL pointer exceptions on purpose. It is observed that the size of the exception message grows ~2x the size of the previous exception. JVM eventually run out of memory resulting in an OOM.
        Interesting but true.

        Here are test results from different configurations on the Weblogic's JVM:

        JVM version options problem reproducible
        --------------------------------------------------------------------------
        1.3.1_16 -server yes
        1.3.1_16 -server, -XX:-OmitStackTraceInFastThrow no
        1.3.1_16 -client no
        1.3.1_16 -Xint no

        1.4.2_09 -server yes
        1.4.2_09 -server, -XX:-OmitStackTraceInFastThrow no
        1.4.2_09 -client no
        1.4.2_09 -Xint no


        A known workaround for the customer is to go with 1.3.1_16 with -XX:-OmitStackTraceInFastThrow, given a slight performance penalty.
        (Note Weblogic 7.0 SP4 does not support 1.4.2)

        The original files for the testcase is in
        /net/cores.central/cores/64729037/CONFIGURATION,
        note the OOMTest2 is modified to use a single bean instead of N bean which N
        is specified in the command line.

        Original Weblogic logs which track the exception message sizes and GC output is in
        /net/cores.central/cores/64729037/LOGS


        Here are steps to reproduce the problem:

        1. logon to khalsi.red.iplanet.com
           % setenv TESTHOME /home/lc3092

        2. % cd $TESTHOME/bea/weblogic700/server/bin
           % sh startWLS.sh (as root)
           Note you can change JAVA_HOME, JAVA_VM, or JAVA_OPTIONS settings inside
           this script
         
        3. wait for weblogic to start up, you will see something about server started
           in RUNNING mode:

        <Sep 21, 2005 3:22:46 PM PDT> <Notice> <WebLogicServer> <000360> <Server started in RUNNING mode>

        4. % cd $TESTHOME/client
           % setenv CLASSPATH .:$TESTHOME/bea/weblogic700/server/lib/weblogic.jar
           % java OOMTest2 10 khalsi.red.iplanet.com


        Here is the output observed from weblogic server:
        (note the increasing exception message's length)

        <...lots of stuff deleted...>

        ejbCreate called
        ------- Server side ex.msg.len = 122, ex.class=class
        java.lang.NullPointerException
        setSessionContext called
        ejbCreate called
        ------- Server side ex.msg.len = 369, ex.class=class
        java.lang.NullPointerException
        setSessionContext called
        ejbCreate called
        ------- Server side ex.msg.len = 863, ex.class=class
        java.lang.NullPointerException
        setSessionContext called
        ejbCreate called
        ------- Server side ex.msg.len = 1851, ex.class=class
        java.lang.NullPointerException
        setSessionContext called
        ejbCreate called
        ------- Server side ex.msg.len = 3827, ex.class=class
        java.lang.NullPointerException
        setSessionContext called
        ejbCreate called
        ------- Server side ex.msg.len = 7779, ex.class=class
        java.lang.NullPointerException
        setSessionContext called
        ejbCreate called
        ------- Server side ex.msg.len = 15683, ex.class=class
        java.lang.NullPointerException
        setSessionContext called
        ejbCreate called
        ------- Server side ex.msg.len = 31491, ex.class=class
        java.lang.NullPointerException


        Here's output from client:

        <...lots of stuff deleted...>

        java.lang.NullPointerException:
        Start server side stack trace:
        java.lang.NullPointerException
        <<no stack trace available>>
        End server side stack trace

        <<no stack trace available>>
        End server side stack trace

        <<no stack trace available>>
        End server side stack trace

        <<no stack trace available>>
        End server side stack trace

        <<no stack trace available>>
        End server side stack trace

        <<no stack trace available>>
        End server side stack trace

        <<no stack trace available>>
        End server side stack trace

        <<no stack trace available>>
        End server side stack trace

        <<no stack trace available>>
        End server side stack trace

        <<no stack trace available>>
        <<----------------
        ------- Main ex.msg.len = 157933, ex.class=class java.rmi.RemoteException
        I created a tarball of the web server with the deployed EJB as
        an alternative way to reproduce:

        1. untar /net/cores.central/cores/64729037/testcase.tar into $TESTHOME

        2. % cd $TESTHOME/bea/weblogic700/server/bin
           % sh startWLS.sh
           Note you can change JAVA_HOME, JAVA_VM, or JAVA_OPTIONS settings inside
           this script

        3. wait for weblogic to start up, you will see something about server started
           in RUNNING mode:

        <Sep 21, 2005 3:22:46 PM PDT> <Notice> <WebLogicServer> <000360> <Server started in RUNNING mode>

        4. % cd $TESTHOME/client
           % setenv CLASSPATH .:$TESTHOME/bea/weblogic700/server/lib/weblogic.jar
           % java OOMTest2 10 <server>
           where server name is the server where you start weblogic,
           for eg. you logged on to titan.sfbay.sun.com and run startWLS.sh
           then run java OOMTest2 10 titan.sfbay.sun.com

              chrisphi Chris Phillips
              lkchow Lawrence Chow
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

                Created:
                Updated:
                Resolved:
                Imported:
                Indexed: