This sounds like https://issues.apache.org/bugzilla/show_bug.cgi?id=50839

If you can capture a TRACE level log form the Tomcat Connector
(configure in isapi_redirect.properties) and attach it to the bug,
I'll take a look.

cheers
tim

On Sun, May 15, 2011 at 1:20 AM, eurotrans-Verlag
<verlag.preis...@t-online.de> wrote:
> Hello everybody,
>
> I stumbled upon a strange problem with the ISAPI Redirector 1.2.31 on
> Windows Server 2008 SP2 (32 bit) with IIS 7.0. The problem is, that when a
> Servlet is generating lots of data (e.g. 200 MB) and a user downloads it
> over the Isapi Redirector/IIS7, and cancels the download, the IIS Worker
> process (w3wp.exe) will have 100% CPU usage for about 30 seconds. However if
> the download is completed normally (not canceled), everything is fine and
> the CPU usage will not go up that far.
>
> The exact Components used are:
> Windows Server 2008 SP2 (32 bit) with IIS 7.0,
> Sun JDK 1.6.0_25,
> Tomcat 7.0.14,
> ISAPI Redirector 1.2.31.
>
> I could reproduce the problem with a clean install of these components.
>
> To reproduce:
> 1. Install Tomcat and the ISAPI Redirector on a Windows Server 2008 SP2 IIS
> 7.0 system, as described in the Tomcat Connectors Documentation
> (The problem occurs with both settings of "enable_chunked_encoding", "true"
> and "false").
>
> 2. Create a Servlet or JSP that produces some huge amount of random data,
> for example:
>
> @WebServlet("/DownloadServlet")
> public class DownloadServlet extends HttpServlet {
>        protected void doGet(HttpServletRequest request, HttpServletResponse
> response) throws ServletException, IOException {
>                response.setContentType("application/x-msdownload");
>                OutputStream out = response.getOutputStream();
>                Random r = new Random();
>                byte[] content = new byte[1024];
>                for (int i = 0; i < content.length; i++)
>                        content[i] = (byte) (r.nextFloat() * 256);
>                for (int i = 0; i < 200000; i++)
>                        out.write(content);
>                out.close();
>        }
> }
>
> 3. Request the Servlet or JSP through the IIS port with a browser. After
> some seconds, cancel the download.
>
> 4. One thread of the IIS Worker Process (w3wp.exe) will have 100% CPU usage
> for some time (about 30 seconds), before it normalizes to 0%.
> Note that is does not happen every time. Sometimes you will have to repeat
> starting and canceling the download until the problem occurs.
>
> 5. In the ISAPI log, following lines are logged ("log_level"="info"):
> [Sat May 14 14:48:55.654 2011] [3508:3560] [error]
> isapi_write_client::jk_isapi_plugin.c (1210): WriteClient failed with 995
> (0x000003e3)
> [Sat May 14 14:48:55.654 2011] [3508:3560] [info]
> ajp_process_callback::jk_ajp_common.c (1885): Writing to client aborted or
> client network problems
> [Sat May 14 14:48:55.654 2011] [3508:3560] [info]
> ajp_service::jk_ajp_common.c (2543): (worker1) sending request to tomcat
> failed (unrecoverable), because of client write error (attempt=1)
> [Sat May 14 14:48:55.669 2011] [3508:3560] [info]
> HttpExtensionProc::jk_isapi_plugin.c (2217): service() failed because client
> aborted connection
>
> These lines are logged immediately after the client cancels the connection
> (not after the CPU usage of w3wp.exe goes down).
>
> The worker process continues normally after the CPU usage went down.
>
> However, if one would do this repeatedly, it could enable DoS attacks,
> couldn't it?
> What would cause these excessive CPU usages of the IIS worker process when
> the user cancels the download?
>
>
> Thanks for your help.
>
> Konstantin Preißer
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
> For additional commands, e-mail: users-h...@tomcat.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to