ws-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andreas Veithen <andreas.veit...@gmail.com>
Subject Re: [Axiom] Encountered OOM issue when service.xml has ServiceTCCL parameter.
Date Thu, 18 Sep 2014 21:44:36 GMT
On a side note: sending the same message to the same mailing list multiple
times in a short time interval generally doesn't increase the likelihood of
getting a response.

Andreas

On Thu Sep 18 2014 at 4:17:39 PM Geeth Munasinghe <geethmks@gmail.com>
wrote:

> Hi
>
> If anyone knows the answer for this question, please help.
>
> Thanks
> Geeth
>
> On Wed, Sep 17, 2014 at 9:55 PM, Geeth Munasinghe <geethmks@gmail.com>
> wrote:
>
>> Hi all,
>>
>> We are using axis2-1.6.1 version, it uses axiom 1.2.11 version, We
>> recently encountered a OOM problem with two services which uses ServiceTCCL
>> parameter. We are using this parameter because both those services use
>> spring and hibernate with them. Scenario is one service is calling the
>> other service. So one service acts as the client.
>>
>> We analyzed the heap dumps and found out that OOM issue was caused by
>> org.apache.axiom.om.util.
>> StAXUtils class. There are few weakhashmaps used in that class. Two of
>> them are
>>
>>    1. inputFactoryPerCLMap
>>    2. outputFactoryPerCLMap
>>
>> And those two weak hashmaps has other weak hashmaps inside of them. Those
>> inner hashmaps cause the issue.
>>
>> We found out that when we use ServiceTCCL parameter  in the service.xml,
>> in AbstractMessageReceiver.java  [1] of axis2 (line number 152 - 170)
>> creates a new class loader object of the MultiParentClassLoader [2] for
>> every request. So in StAXUtils class [3] in axiom, methods [4] and [5] uses
>> inner  weak hashmaps of inputFactoryPerCLMap,  outputFactoryPerCLMap and
>> fill them with the class loader as the key and XMLInputFactory /
>> XMLOutputFactory as the value.
>>
>> Because every request gets a new class loader object of the
>> MultiParentClassLoader, their hash values are different. So they are keep
>> getting filled into those inner weak hash maps. Because the same key
>> (classloder instance) gets inserted into both weak hashmaps, garbage
>> collector does not remove them. So server goes OOM, When we analyze the
>> heap dumps we found out that java.util.WeakHashMap fills over 80% of the
>> memory when it goes OOM.
>>
>> I have made fix in StAXUtils in axiom as follows.
>>
>> Instead map.get(cl) I change it to map.get(cl.getClass().getName())
>>
>> Instead map.put(cl, factory) I changed it to
>> map.put(cl.getClass().getName(), factory)
>>
>> I have attached the fix (svn diff) here with email. I am not sure I have
>> done the correct fix for the issue. But I found that it solves my problem.
>> Can some one please verify weather I have done the correct fix.
>>
>> Please consider that upgrading to new axis2 is not a solution for us at
>> the moment.
>>
>> [1]
>> http://svn.apache.org/repos/asf/axis/axis2/java/core/tags/v1.6.1/modules/kernel/src/org/apache/axis2/receivers/AbstractMessageReceiver.java
>>
>> [2] org.apache.axis2.classloader.MultiParentClassLoader
>>
>> [3] org.apache.axiom.om.util.StAXUtils
>>
>> [4] getXMLInputFactory_perClassLoader(StAXParserConfiguration
>> configuration)
>>
>> [5] getXMLOutputFactory_perClassLoader(StAXWriterConfiguration
>> configuration)
>>
>>
>> Thanks in advance.
>>
>> Geeth
>>
>
>

Mime
View raw message