axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Ann Robinson (JIRA)" <>
Subject [jira] Updated: (AXIS2-2968) Out-Of-Memory error on server side - Use of wsdl4j WSDLDefinition
Date Fri, 12 Oct 2007 16:28:51 GMT


Ann Robinson updated AXIS2-2968:

    Attachment: patch_03.txt

The patch patch_03.txt contains the updates for the WSDLDefintionWrapper.

The idea is to have a wrapper for the WSDL4J's wsdl Definition object so that the memory footprint
can be reduced in certain environments.

Note that this is used for those wsdl Definition objects that are kept in memory as a Parameter
on the AxisService object, since these objects can potentially be in memory for a long time.

The WSDLDefinitionWrapper has been split into a top-level class, which makes the decision
on when and how to reduce the memory footprint, and some low-level implementation classes,
each of which uses a different technique to reduce the memory footprint.  The implementation
classes include:
- a basic passthru implementation where no reduction is done, just invokes the underlying
WSDL4J Definition object
- a serialization implementation where the WSDL4J Definition object is serialized/de-serialized
(but note that some wsdl files fail to serialize with WSDL4J v1.6.2)
- a reload implementation that releases portions of the WSDL4J Definition object and reloads
the wsdl if needed

WSDLDefinitionWrapper selects its implentation class is as follows:
- the default is the basic passthru, minimizing the overhead
- the default memory reduction is the serialization implementation, which 
avoids the pitfalls of trying to reload the wsdl file
- checks for configuration settings in the axis2.xml file

The configuration setting in the axis2.xml file provides a way to easily turn on the memory
reduction on the WSDL4J Definition objects, and
to select which technique to use.  This is important since different environments require
different techniques.  

There is a separate issue being worked with the WSDL4J developers
to try to reduce the memory footprint within the WSDL4J implementation.
However, the timeframe for a resolution is uncertain, and their solution might require doing
some extra steps (in which case, the WSDLDefinitionWrapper can do without impacting axis2

> Out-Of-Memory error on server side - Use of wsdl4j WSDLDefinition
> -----------------------------------------------------------------
>                 Key: AXIS2-2968
>                 URL:
>             Project: Axis 2.0 (Axis2)
>          Issue Type: Bug
>          Components: kernel
>            Reporter: Ann Robinson
>            Assignee: Ann Robinson
>            Priority: Critical
>         Attachments: patch_01.txt, patch_02_part1.txt, patch_03.txt, wsdlFromFileSystem.patch
> In some server-side environments, there is an out-of-memory problem when      
> attempting to handle a large number of JAXWS-based web service applications.  
> In the test scenario that fails, the server is attempting to load and start   
> 100 web service applications. A variety of heap sizes was tried to see if     
> a heap size for the server could be found to work, ranging from 1 GB to 4 GB. 
> Increasing the heap size did not work - the out-of-memory error continued to  
> occur.                                                                        
> In analyzing the java heap dumps, one of the biggest consumers of the memory  
> is with the wsdl4j WSDLDefinition objects.  In the test scenario, the         
> wsdl4j-related objects consumed about a quarter to a third of the entire heap.
> The WSDLDefinition object is a very heavy-weight object, much of which stems  
> from its use of the xerces dom objects as underlying support, particularly    
> for the schemas.                                                              
> One area to investigate is the saving of the WSDLDefinition as a Parameter    
> in the AxisService's ParameterInclude list so that, if some component needs   
> to utilize the WSDLDefinition object, it can be accessed via the AxisService  
> object.                                                                       
> Is it possible to reduce the utilization of the WSDLDefinition?               
> Some ideas are:                                                               
> (a) releasing it when it is no longer needed                                  
>          - this might not be possible to determine                            
> (b) putting a wrapper on the WSDLDefinition                                   
>          - so that the WSDLDefinition,or a portion of the WSDLDefinition,     
>            can be released                                                    
>          - but if the WSDLDefinition is accessed after it was released,       
>            the wrapper can reload the WSDLDefinition transparently to the     
>            user                                                               
> (c) create a layer for caching wsdl-related information                       
>          - this would allow for releasing memory based on some algorithm      
>            and/or interface that could indicate what's no longer needed       

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:
For additional commands, e-mail:

View raw message