Hi Stan,

Would like your help in replicating this issue.

I have devised a process which calls an external service. I have a
continuous looping call to the process from the soapUI.
I have run about 4000 instances a couple of times, and I don't see
AxisService Instances going beyond 110 as my threads per host is equal to
100.

regards,
sathwik




On Tue, Jul 15, 2014 at 12:59 PM, Sathwik B P <sathwik...@gmail.com> wrote:

> Hi Stan,
>
> Thanks for reporting and your patch.
>
> Will look into it when I get some freetime.
>
> For your question about building ODE with axis2 1.6, it's not possible at
> the moment as it needs some changes in the Axiom usage within ODE.
>
> Will see if we can bring it on 1.3.7 release, though the timelines are not
> fixed yet.
>
> regards,
> sathwik
>
>
> On Mon, Jul 14, 2014 at 10:15 PM, Stan Angeloff <stani...@angeloff.name>
> wrote:
>
>> For those interested, I ended up patching Axis2 1.5.6 from source with
>>
>> https://gist.github.com/StanAngeloff/e245a1a349d04efcfad6#file-axis2-1-5-6-cleanup-patch
>> The patch has been adapted from two commits on the 1_6 branch. I
>> re-compiled the kernel module and swapped the one that comes with the
>> binary distribution of ODE. This seems to have resolved the issue for me.
>>
>> I also found https://issues.apache.org/jira/browse/ODE-585, however it's
>> tagged for 2.0. IMHO memory leaks are a pretty major issue and should get
>> addressed in whatever is the current stable release?
>>
>>
>> On 14 July 2014 14:31, Stan Angeloff <stani...@angeloff.name> wrote:
>>
>> > *tl;dr;* Is it possible to use Axis 1.6 in ODE? How does one go about
>> > building ODE and bundling it with Axis 1.6?
>> >
>> > Digging a bit deeper in the log files with
>> > log4j.category.org.apache.axis2=DEBUG and
>> > log4j.category.org.apache.ode=DEBUG configured yields interesting
>> results.
>> > When a ServiceClient instance is created, the second parameter is NULL.
>> > When this is the case, Axis2 will create a new anonymous service (
>> >
>> https://github.com/apache/axis2-java/blob/1_5/modules/kernel/src/org/apache/axis2/client/ServiceClient.java#L137
>> ).
>> > The anonymous service is then added to the AxisConfiguration instance (
>> >
>> https://github.com/apache/axis2-java/blob/1_5/modules/kernel/src/org/apache/axis2/client/ServiceClient.java#L176
>> > ).
>> >
>> > Internally, this creates a new AxisServiceGroup (
>> >
>> https://github.com/apache/axis2-java/blob/1_5/modules/kernel/src/org/apache/axis2/engine/AxisConfiguration.java#L315
>> ).
>> > This then adds the new anonymous service to an allEndpoints property (
>> >
>> https://github.com/apache/axis2-java/blob/1_5/modules/kernel/src/org/apache/axis2/engine/AxisConfiguration.java#L373
>> > ).
>> >
>> > When ODE calls setAxisService, Axis2 clean up the service (
>> >
>> https://github.com/apache/axis2-java/blob/1_5/modules/kernel/src/org/apache/axis2/engine/AxisConfiguration.java#L612
>> ).
>> > It does not, however, clean up the reference from allEndpoints.
>> >
>> > The filtered catalina.out
>> > <
>> https://gist.githubusercontent.com/StanAngeloff/9f1798e34963012bc190/raw/catalina.out.filtered
>> >
>> > log is attached for reference. Analysing the heap dumps indicates that
>> > allEndpoints is indeed the culprit.
>> >
>> > Axis 1.6 seems to have a fix for this issue:
>> >
>> >
>> https://github.com/apache/axis2-java/blob/1_6/modules/kernel/src/org/apache/axis2/engine/AxisConfiguration.java#L679
>> >
>> > Is it possible to use Axis 1.6 in ODE? How does one go about building
>> ODE
>> > and bundling it with Axis 1.6?
>> > Should the ODE 1.3.x branch be updated to use the latest stable Axis2?
>> >
>> > Regards,
>> > Stan
>> >
>> >
>> >
>> >
>> > On 14 July 2014 13:45, Stan Angeloff <stani...@angeloff.name> wrote:
>> >
>> >> Hello,
>> >>
>> >> I've been playing with ODE for quite a while now and one of my most
>> >> recent attempts tried to run 5, 000 simultaneous instances of one
>> process.
>> >> Unfortunately after a while ODE uses up all of the allowed memory and
>> barfs
>> >> 'Java heap space' continuously in the log.
>> >>
>> >> My set up is very basic, starting from
>> >> https://github.com/vanto/apache-ode-tomcat-bundle (which has been an
>> >> excellent learning tool). The main .bpel file consists of a continuous
>> >> Repeat Until inside of which there are two sequential invoke activities
>> >> calling external SOAP services.
>> >>
>> >> When the 5, 000 instances are started, the memory footprint is fairly
>> >> stable. After a while, though,
>> org.apache.axis2.engine.AxisConfiguration
>> >> accumulates a lot of org.apache.axis2.description.AxisService instances
>> >> (all of which have their name property set to 'anonService' + hash).
>> >> Those keep growing until eventually the server stops responding due to
>> >> exhausted memory. I have taken heap dumps at various stages and
>> examined
>> >> those. Eclipse was even smart enough to detect the potential memory
>> leak on
>> >> the latest dump just as the server crashed.
>> >>
>> >> One instance of "org.apache.axis2.engine.AxisConfiguration" loaded by
>> >>> "org.apache.catalina.loader.WebappClassLoader @ 0xe07e53e0" occupies
>> >>> 390,800,064 (75.91%) bytes. The memory is accumulated in one instance
>> of
>> >>> "java.util.concurrent.ConcurrentHashMap$Segment[]" loaded by "<system
>> class
>> >>> loader>".
>> >>
>> >>
>> >> I'll be happy to export the complete project, note however it doesn't
>> >> matter what services are invoked or what the .bpel does so long it's a)
>> >> continuous, e.g., does not stop b) calls an external service.
>> >>
>> >> I tried looking into ODE/Axis2 to try and figure out what might be
>> going
>> >> wrong. My understanding is that service clients are cached and recycled
>> >> in SoapExternalService.java (
>> >>
>> https://github.com/apache/ode/blob/master/axis2/src/main/java/org/apache/ode/axis2/SoapExternalService.java#L265
>> )
>> >> When a new ServiceClient instance is created, it calls the
>> >> configureServiceClient method within Axis2 with axisService = null (
>> >>
>> https://github.com/apache/axis2-java/blob/1_5/modules/kernel/src/org/apache/axis2/client/ServiceClient.java#L143
>> ).
>> >> That in turn calls createAnonymousService. Later on, ODE calls
>> >> setAxisService which forces Axis2 to dispose of the anonymous service
>> it
>> >> created earlier.
>> >>
>> >> If the above is indeed what is happening, then there should be no
>> memory
>> >> leaks. However, in the memory dumps the number of instances of
>> >> org.apache.axis2.description.AxisService keeps growing. I've tried
>> >> increasing the maximum heap size up to 8GB and it will fail again, it
>> is
>> >> just a matter of time.
>> >>
>> >> Has anyone else experienced this? Is anyone interested in trying to
>> help
>> >> me narrow down the cause of this? Is it possible it's not even a memory
>> >> issue?
>> >>
>> >> Regards,
>> >> Stan
>> >>
>> >
>> >
>>
>
>

Reply via email to