dev@glassfish.java.net

java.lang.OutOfMemoryError at a few K HTTP gzip operations from a single client.

From: Gustav Trede <gustav.trede_wsdevel_at_telia.com>
Date: Wed, 24 Oct 2007 03:13:36 +0200

hello ,

      GF is freshly started with only a single simple'ping' WS servlet
deployd, no admin gui loaded.

      doing the same operation sequencially a few thousand times from a
from a single client with a response payload of 190 bytes:

       roughly one new socket per few Koperations is created by the server.
       (a side note: its interesting that using gzip solves the
'throughput' problem i normally have, where server is killing the
single clients sockets in a non consistent almost random way during load)

       Within 10K operations i get serious problems:
        Serverside mem usage is building up, allocating 1GB extra ram or
so compared to not using gzip for exact same tests sequence and data
set.
 
    StandardWrapperValve[TEST_HTTP_FI]: PWC1406: Servlet.service() for
servlet TEST_HTTP_FI threw exception
    javax.servlet.ServletException
        at
com.sun.enterprise.webservice.JAXWSServlet.doPost(JAXWSServlet.java:164)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:738)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:831)
        at
org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:411)
        at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:290)
        at
org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:271)
        at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:202)
        at
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
        at
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
        at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94)
        at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:206)
        at
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
        at
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
        at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
        at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
        at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:150)
        at
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
        at
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
        at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
        at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
        at
org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:270)
        at
com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:637)
        at
com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:568)
        at
com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:813)
        at
com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:339)
        at
com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:261)
        at
com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:212)
        at
com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265)
        at
com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106)
Caused by: java.lang.OutOfMemoryError
        at java.util.zip.Deflater.init(Native Method)
        at java.util.zip.Deflater.<init>(Deflater.java:123)
        at java.util.zip.GZIPOutputStream.<init>(GZIPOutputStream.java:46)
        at java.util.zip.GZIPOutputStream.<init>(GZIPOutputStream.java:58)
        at
org.apache.coyote.http11.filters.GzipOutputFilter.doWrite(GzipOutputFilter.java:109)
        at
org.apache.coyote.http11.InternalOutputBuffer.doWrite(InternalOutputBuffer.java:626)
        at org.apache.coyote.Response.doWrite(Response.java:599)
        at
org.apache.coyote.tomcat5.OutputBuffer.realWriteBytes(OutputBuffer.java:404)
        at
org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:417)
        at
org.apache.coyote.tomcat5.OutputBuffer.doFlush(OutputBuffer.java:357)
        at
org.apache.coyote.tomcat5.OutputBuffer.flush(OutputBuffer.java:335)
        at
org.apache.coyote.tomcat5.CoyoteOutputStream.flush(CoyoteOutputStream.java:160)
        at
com.sun.xml.fastinfoset.Encoder.encodeDocumentTermination(Encoder.java:609)
        at
com.sun.xml.fastinfoset.stax.StAXDocumentSerializer.writeEndDocument(StAXDocumentSerializer.java:181)
        at
com.sun.xml.ws.message.AbstractMessageImpl.writeTo(AbstractMessageImpl.java:146)
        at
com.sun.xml.ws.encoding.fastinfoset.FastInfosetStreamSOAPCodec.encode(FastInfosetStreamSOAPCodec.java:106)
        at
com.sun.xml.ws.encoding.SOAPBindingCodec.encode(SOAPBindingCodec.java:265)
        at
com.sun.xml.ws.transport.http.HttpAdapter.encodePacket(HttpAdapter.java:320)
        at
com.sun.xml.ws.transport.http.HttpAdapter.access$100(HttpAdapter.java:93)
        at
com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:454)
        at
com.sun.xml.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:244)
        at
com.sun.xml.ws.transport.http.servlet.ServletAdapter.handle(ServletAdapter.java:135)
        at
com.sun.enterprise.webservice.JAXWSServlet.doPost(JAXWSServlet.java:159)
        ... 28 more

     I could not find this as a know issue.
     Any idea for workaround ?
   

using :

      VM mem settings: -server -XX:+UseParallelOldGC -XX:+UseParallelGC
-Xms512m -Xmx512m -XX:MaxPermSize=192m -XX:NewRatio=2

      GFv2ur1 23/10 nighthly + WSIT CVS + jdk 1.6u5b5 win xp pro 64bit.
2GB ram. amd dualcore cpu.

regards
  gustav trede