Axis2 1.5.1 memory issues when invoked stub client in multiple threads
----------------------------------------------------------------------

                 Key: AXIS2-4742
                 URL: https://issues.apache.org/jira/browse/AXIS2-4742
             Project: Axis2
          Issue Type: Bug
          Components: adb
    Affects Versions: 1.5.1
         Environment: Windows XP professional, service hosted in tomcat 5.0.28 
& Tomcat 6.0.26, JRE version 1.5.0_14, 32 bit OS, Total Physical Memory - 4 GB, 
Total RAM - 1.58 GB,Total VM - 2.00 GB,Available VM - 1.96 GB,Processor - x86 
family 6 Model 2494 Mhz
            Reporter: Prakash C Rao
            Priority: Blocker
             Fix For: 1.6


We are using Axis 1.4 library for our current production system and we are 
hitting out of memory due to de-serialization bug in Axis 1.4. 

https://issues.apache.org/jira/browse/AXIS-2698

Later we found Apache has stopped working on Axis1 generation (1.4 is the last 
version) and has moved to Axis2 generation. I did lot of reading and found good 
things (especially on memory footprint) about Axis2 and we made a decision to 
move to Axis2 1.5.1. Before using this for our product, we did a small POC on 
Axis2 1.5.1 confirm what is being claimed (as far as memory foot print is 
concerned) is really true. 

In my POC I wrote a sample application and I invoked 4 simple service APIs in 
multiple threads. I see memory growing drastically up to 900MB - 1GB and lot of 
GC happening. And even after full GC the memory stays up for some duration. I 
read lot of articles on internet about Axis2 and came to know that there were 
memory leak issues in Axis2 1.4 which was fixed in Axis2 1.5 but I still see 
memory issues in Axis2 1.5.1. I also did POC with our product code using Axis2 
1.5.1 and I see same results (high memory usage) when I invoke stub using 
multiple threads.

>From the articles I came to know that stub is not thread safe but I've made 
>sure thread safety for stub creation. I'm creating only one configuration 
>context object and I'm creating new stub for each invocation which uses that 
>configuration context. After the invocation, I'm cleaning up the stub & 
>transport to ensure all cleanups are being done properly. I'm also caching 
>http client for better performance and setting auto release flags for proper 
>cleanup. I've followed all best practices that I Amila has suggested (thanks 
>very much Amila) in his various blogs. I also debugged Axis2 1.5.1 code to see 
>usage of various flags that I've set in the code. In spite of all this I see 
>lot of memory usage. In fact I see better results in Axis 1.4 as far as memory 
>is concerned. 

I'm attaching the source code for client (rl.txt -> rename to rl.bat starts the 
client in various threads), service, GC log & profiling report. From the 
profiling I see huge references to the below objects that's being mentioned in 
http://www.5341.com/list/56/222882.html

java.util.concurrent.ConcurrentHashMap$Segment
java.util.concurrent.locks.ReentrantLock$NonfairSync
java.util.concurrent.ConcurrentHashMap$HashEntry[]

One of Amila's blog talks about caching stub object but I'm afraid of socket 
timeout if I use the same stub for longer period of time (hence I'm creating 
new stub each invocation and cleaning up after call is done).

Could you please help me out in this regard? 

Btw, I should really thank Amila for most of his blogs on Axis2 (2 of them I've 
listed below). It was really helpful for me.

http://www.5341.com/list/56/222882.html
http://amilachinthaka.blogspot.com/



-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to