We have been trying to figure out why our WLS JVM runs out of memory when using our Metro Jax-WS based webapp. A heap dump analysis revealed that there are a dozen of weblogic.servlet.internal.ServletInputStreamImpl instances holding ~100MB byte arrays(100000000 bytes). Eclipse-based Memory Analyzer suggests the following:
One instance of "weblogic.servlet.internal.ServletInputStreamImpl" loaded by "sun.misc.Launcher$AppClassLoader @ 0xffffffff30418a60" occupies 100 000 672 (10,56%) bytes. The memory is accumulated in one instance of "byte" loaded by "<system class loader>".
Should we trust this report or could there be potentially something unclear about the heap analysis made by Memory Analyzer? Likewise, Memory analyzer tells that, upon extraction of heap dump, the contents of the byte array(web service requests formed by Metro Jax-WS framework) measures aprox. 150 characters, with the remaining 99999 KB being unused. That said, does anyone have an idea of why WLS web container would reserve 100MB(???) buffer size for the servletinputstreams? Could there be something wrong with the web service framework or is the buffer size fully controlled within the web container?