tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Daniel Hagen" <dha...@h1-software.de>
Subject Performance problem on HTTP PUT of large binary data
Date Wed, 25 Jul 2007 16:45:34 GMT
Dear All,

I am currently developing an application that handles uploads of big files using HTTP PUT.
The I/O part of the server application can be broken down to (not literally spoken, just to
make the working clear):

public void doPut(HttpServletRequest request, HttpServletResponse response)
{
     InputStream in = request.getInputStream();
     OutputStream out = new FileOutputStream("some_file");
     [Transfer data between streams using a 32K buffer]
}

The client is a Java client writing 32K blocks to the server using chunked streaming mode
with 32K chunk size.

On performance tests I noticed the CPU load of the server going up to 100% and remaining there
during the complete upload.
I did some further profiling and finally got one (in my eyes) very propable candidate:
The read(byte[]) methods of the (Coyote)InputStream return only blocks of ~1000 to ~7500 bytes
resulting in an excessive amount of calls to the aforementioned methods in the process.
 (Windows & Linux alike, same behavior when accessing localhost or on access over network,
c++ libcurl client produces the same pattern).
The delay between the calls also does not seem to matter since the blocks to not get larger
even with a 1 second or larger delay between the calls to InputStream.read(byte[]).

I also noticed a funny pattern in the number of bytes read, there seems to be a fixed maximum
of ~7000 bytes (windows) and a similar but not equal number (~7700) on linux.

I tested with Tomcat 6.0.13 accessing the Tomcat HTTP connector directly, the connector was
configured with:
[...]
              socket.appReadBufSize="32678"
              socket.appWriteBufferSize="32768"
              socket.rxBufSize="32678"

(BTW, Tomcat 5.5 behavior is the same)

So finally my question:

Do you have any idea what could cause the described behavior and prevent the server from returning
larger buffers?
Any parameters I could check/tweek to overcome that problem?

Thank you!

Daniel


---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org


Mime
View raw message