Hi André, thanks for your reply. > To figure out if this is what's happening, you could do some logging at > the servlet end, > to see if it keeps sending data even when the client has canceled, or > if it itself gets > some stop indication from the isapi_redirector (also a closed socket > e.g.). > > Or else Mladen or Rainer could tell us if I'm totally off-base here.
I added some logging to the Servlet to see what it is actually doing (logging the start and end of the doGet() method and every time 2 MB are written, and I also put the write loop in a try-catch clause to catch IOException). You are right: When I start the download, the servlet writes the bytes slowly (due to the speed of the Connection) to the output. However, when I then cancel the download, it writes the remaining bytes very fast, probably causing the high CPU usage of the ISAPI redirector. But in some cases, the result is another: After I canceled the download, the write() method throws an IOException: ClientAbortException: java.io.IOException: Failed to send AJP message and the remaining bytes are not written, so the CPU usage does not go up to 100% (That's probably the other case I mentioned before, that sometimes the CPU usage doesn't go up). However I would expect write() to always throw an IOException when the connection to the client is aborted, but it seems that in most cases, the IOException is not thrown, thus causing the servlet to write the remaining bytes very fast to the ISAPI redirector and probably causing the high CPU load. Do you or anybody have an idea why sometimes the IOException is not thrown when the Client aborts the Connection? Cheers Konstantin Preißer --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org