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]