What's the status of this? This would be really nice if it's incorporated into the next release candidate of Axis.

On Mon, 06 Dec 2004 16:40:34 +0100, [EMAIL PROTECTED]
<[EMAIL PROTECTED]> wrote:

Hi,

While doing performance tests on deserialization, I noticed that Axis
scales very poorly when increasing the number of threads.

Here are the figures:
5 threads, 1000 messages: 15 seconds
10 threads, 1000 messages: 56 seconds
15 threads, 1000 messages: 93 seconds

The root of the problem is in XMLUtils. Each time a node is created via
the static fuction newDocument(...), there are two functions,
getDocumentBuilder() and realeaseDocumentBuilder(), called which both
peform synchronisation over a pool of document builders
(documentBuilders ). Since XML documents contain many nodes and there
are at least two synchronization points in the code per node created, I
let you imagine the overhead suffered when more threads come into play.

I was able to achieve a significant performance boost by replacing the
pool of DocumentBuilders (documentBuilders) by a single document builder
stored in a ThreadLocal variable. This was already suggested a while ago
in this mailing list (see "Performance Issues with AXIS & Axis Response
time appears linear with load").

The results of my benchmark with the changes brought to the code are
shown below.

5 threads, 1000 messages:  13seconds
10 threads, 1000 messages:  25,5 seconds
15 threads, 1000 messages: 37 seconds

As you can see, deserialization time scales now linearly with the number
of threads which is a lot better. I placed the code in attachment. Could
you include sth equivalent in the next release of the Axis.

Thanks,
Sebastien




Reply via email to