Could you repeat the test having a method/service that just sleeps in the
same class that
is  called first then issue a second request that gets measured. (Using the
same
Axis servlet of course :-)

same classes except that one just pauses/sleeps.
>One of the MAJOR issues that I have noted with axis is the way it parses
the
>data. In a sense you data is parsed in 2 passes.
>Originally what happens is Axis deserializes XML into MessageElement
objects
>constructing a DOM structure. At this time all of the SAX events are
>recorded.
>When that is done, you use the built DOM to navigate the envelope. Once
you
>have found the node containing the Data, you playback recoded SAX events
>into type serializers to get the value of the node.
>This isn't helping latency, and also likes to eat memory a bit.
>I was looking into adding an option to serialize types as soon as you hit
>nodes with registered types, and skip creation of child nodes.
>It was working for the most part, but I was having some problems with
>multiRef (href) elements.
>There maybe some other way to optimize parse/serialization process, but I
am
>not sure at the moment what it would be. If you have any ideas I might be
>able to try to make them work.
>-Taras
>> -----Original Message-----
>> From: Berin Loritsch [mailto:[EMAIL PROTECTED]]
>> Sent: Thursday, February 28, 2002 7:42 AM
>> To: [EMAIL PROTECTED]
>> Subject: Re: Latency Performance of AXIS vs. Apache SOAP
>>
>>
>> Dan Davis wrote:
>> > I've been doing some simple experiements that compare AXIS,
>> > Apache SOAP, and other implementations (SoapRMI).
>> >
>> > One test requests a single string (size 200, 400, and 800), and
>> > another an array of integers (array size 200, 400, and 800).
>> > There's no argument to the functions (not an echo test),
>> > because most real-world web-apps will send small requests
>> > most of the time.  All tests are performed on the same host
>> to discount
>> > network delays.  I use all default serializers/deserializers and
>> > SOAP encoding.  The strings and arrays are pre-built on the server.
>> > Note this doesn't measure the throughput of the server,
>> > just the latency when the server is idle.  There's a warming
>> > period for class loading and stuff.
>> >
>> > I expected  to see that Axis has lower latency than
>> > Apache due to use of SAX, but I don't see that.  Axis is
>> > actually slower.
>>
>> Keep in mind that Axis has not reached the point of performance
>> tuning yet.  While it is a worthy goal to be performant, it is
>> the first priority to be correct.
>>
>> There can be a large number of reasons for latencies.  Do keep
>> in mind that SAX addresses scalability more than it addresses
>> "quickness".  Sometimes the two go hand in hand.  This time, we
>> are processing the request and responce in chuncks.  That allows
>> Axis to process several requests at once--even if they work on
>> large data sets.
>>
>> Now, to address latencies, Axis does have a more complex pipeline.
>> I am not familiar with SoapRMI or Apache SOAP internals, but I do
>> know that Axis has a transport pipeline and a service pipeline. The
>> Transport pipeline takes care of converting the incoming request to
>> SAX, and any other associated tasks with the transport (like
>> obtaining the client certificate).  Axis then processes the request
>> and maps it to the service in question.  The service has its own
>> pipeline--which can process SOAP Headers and modify the content coming
>> in.  Then the service does its actual work.  Lastly, we reverse the
>> process coming out.
>>
>> All of these stages can introduce latencies.  Not to mention, using
>> the stock serializers can introduce latencies if you are required
>> to pass an entire structure to it.  It will naturally take longer
>> to process returning a large String value via SOAP if we require
>> the whole thing to be sent at once.
>>
>> If the String serializer can accept chunks (which I suspect is what
>> SoapRMI is doing) then the Serializer can start the SOAP response
>> almost immediately.  The String serializer would be sending
>> characters( char[], int begin, int length ) messages for each chunk
>> it sends.
>>
>> >
>> >
>> >   getInt(200) getInt(400) getInt(800)
>> >
>> > SoapRMI  22.2 ms  24.4 ms  31.5 ms
>> > Apache SOAP 65.8 ms  117.3 ms 190.7 ms
>> > Apache Axis 79.7 ms  157.4 ms 238.8 ms
>> >
>> >   getStr(200) getStr(400) getStr(800)
>> >
>> > SoapRMI  19.3 ms  19.6 ms  19.9 ms
>> > Apache SOAP 22.7 ms  24.2 ms  25.1 ms
>> > Apache Axis 20.9 ms  19.6 ms  20.6 ms
>> >
>> > I'm using all default serializers, deserializers.  The strings
>> > and arrays are pre-built and initialized on the server.  SOAP
>> > encoding.
>> >
>> > Do you have any suggestions for speeding up Axis with
>> > the current code-base?
>> >
>> > This is for an article that I'll post here once complete.
>> >
>> >
>> >
>>
>>
>>
>> --
>>
>> "They that give up essential liberty to obtain a little
>> temporary safety
>>   deserve neither liberty nor safety."
>>                  - Benjamin Franklin
>>


Rick Rineholt
"The truth is out there...  All you need is a better search engine!"

[EMAIL PROTECTED]

Reply via email to