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

              Assignee:
              Chris Phillips
              Reporter:
              Lawrence Chow
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

                Created:
                Updated:
                Resolved:
                Imported:
                Indexed: