tomcat-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Konstantin Prei├čer <kpreis...@apache.org>
Subject RE: [VOTE] Release Apache Tomcat 8.0.0-RC7
Date Sat, 14 Dec 2013 12:53:25 GMT
Hi Mark,

> -----Original Message-----
> From: Mark Thomas [mailto:markt@apache.org]
> Sent: Thursday, December 12, 2013 12:28 AM


> > The proposed 8.0.0-RC7 release is:
> > [ ] Broken - do not release
> > [ ] Alpha - go ahead and release as 8.0.0-RC7 alpha


While the issue with large static files that I got with 8.0.0-RC6 is now solved when using
the http (NIO) connector, I got another problem with downloading large files on Tomcat 8.0.0-RC7
when using the AJP NIO connector.

I was using IIS 8.5 on Windows Server 2012 R2 with Java 1.7.0_45 x64, and configured the ISAPI
Redirector 1.2.37 to forward all requests to Tomcat.


1)

I placed a static file with a size of 208,687,239 bytes into a web application. If I request
this file over Tomcat's HTTP connector, everything works. But if I request it over IIS's HTTP
connector (which forwards the request to Tomcat over AJP), then the first time I get an download
dialog in the browser (I canceled it), but Tomcat starts to use ~ 100% CPU in one core. If
I request the file again, I get lots of OOMs in Tomcat's log:


14-Dec-2013 13:09:56.960 SEVERE [ajp-nio-8019-exec-8] org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun

 java.lang.OutOfMemoryError: Java heap space
	at java.nio.HeapByteBuffer.<init>(HeapByteBuffer.java:57)
	at java.nio.ByteBuffer.allocate(ByteBuffer.java:331)
	at org.apache.coyote.ajp.AbstractAjpProcessor.addToBuffers(AbstractAjpProcessor.java:1590)
	at org.apache.coyote.ajp.AbstractAjpProcessor.writeData(AbstractAjpProcessor.java:1582)
	at org.apache.coyote.ajp.AbstractAjpProcessor.access$200(AbstractAjpProcessor.java:62)
	at org.apache.coyote.ajp.AbstractAjpProcessor$SocketOutputBuffer.doWrite(AbstractAjpProcessor.java:1724)
	at org.apache.coyote.Response.doWrite(Response.java:520)
	at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:391)
	at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:426)
	at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:339)
	at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:421)
	at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:409)
	at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:97)
	at org.apache.catalina.servlets.DefaultServlet.copyRange(DefaultServlet.java:1951)
	at org.apache.catalina.servlets.DefaultServlet.copy(DefaultServlet.java:1791)
	at org.apache.catalina.servlets.DefaultServlet.serveResource(DefaultServlet.java:919)
	at org.apache.catalina.servlets.DefaultServlet.doGet(DefaultServlet.java:400)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:176)
	at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145)
	at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92)
	at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:394)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at common.XUaCompatibleHeaderFilter.doFilter(XUaCompatibleHeaderFilter.java:27)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)

14-Dec-2013 13:09:58.694 SEVERE [ajp-nio-8019-ClientPoller-0] org.apache.tomcat.util.net.NioEndpoint$Poller.run

 java.lang.OutOfMemoryError: Java heap space
	at org.apache.tomcat.util.net.NioEndpoint.reclaimParachute(NioEndpoint.java:313)
	at org.apache.tomcat.util.net.NioEndpoint.checkParachute(NioEndpoint.java:298)
	at org.apache.tomcat.util.net.NioEndpoint$Poller.run(NioEndpoint.java:1128)
	at java.lang.Thread.run(Thread.java:744)

14-Dec-2013 13:09:58.694 SEVERE [ajp-nio-8019-ClientPoller-1] org.apache.tomcat.util.net.NioEndpoint$Poller.run

 java.lang.OutOfMemoryError: Java heap space
	at org.apache.tomcat.util.net.NioEndpoint.reclaimParachute(NioEndpoint.java:313)
	at org.apache.tomcat.util.net.NioEndpoint.checkParachute(NioEndpoint.java:298)
	at org.apache.tomcat.util.net.NioEndpoint$Poller.run(NioEndpoint.java:1128)
	at java.lang.Thread.run(Thread.java:744)

14-Dec-2013 13:10:00.600 SEVERE [ajp-nio-8019-ClientPoller-0] org.apache.tomcat.util.net.NioEndpoint$Poller.run

 java.lang.OutOfMemoryError: Java heap space
	at org.apache.tomcat.util.net.NioEndpoint.reclaimParachute(NioEndpoint.java:313)
	at org.apache.tomcat.util.net.NioEndpoint.checkParachute(NioEndpoint.java:298)
	at org.apache.tomcat.util.net.NioEndpoint$Poller.run(NioEndpoint.java:1128)
	at java.lang.Thread.run(Thread.java:744)

14-Dec-2013 13:10:01.991 SEVERE [ajp-nio-8019-ClientPoller-0] org.apache.tomcat.util.net.NioEndpoint$Poller.run

 java.lang.OutOfMemoryError: Java heap space

14-Dec-2013 13:10:02.257 SEVERE [ajp-nio-8019-ClientPoller-1] org.apache.tomcat.util.net.NioEndpoint$Poller.run

 java.lang.OutOfMemoryError: Java heap space

14-Dec-2013 13:10:04.663 SEVERE [ajp-nio-8019-ClientPoller-0] org.apache.tomcat.util.net.NioEndpoint$Poller.run

 java.lang.OutOfMemoryError: Java heap space


2)

I had an issue today morning (also with Tomcat 8.0.0-RC7) where the ISAPI Redirector was only
serving empty responses (but with correct headers). The raw request/response to IIS looked
like this:

Request:
GET / HTTP/1.1
Host: mydomain.de
Connection: keep-alive

Response:
HTTP/1.1 200 OK
Transfer-Encoding: chunked
Content-Type: application/xhtml+xml;charset=UTF-8
Expires: Sat, 01 Jan 2000 00:00:00 GMT
Server: Microsoft-IIS/8.5
X-UA-Compatible: IE=edge
Date: Sat, 14 Dec 2013 10:43:00 GMT

0

I then made the same request directly to Tomcat's HTTP NIO connector, but there everything
worked - the response body was received correctly.

This is my ISAPI redirector's workers.properties:
  worker.list=worker1
  worker.worker1.type=ajp13
  worker.worker1.host=localhost
  worker.worker1.port=8019

This is uriworkermap.properties:
  /*=worker1
  !/iis-dir/*=worker1

The ISAPI redirector is configured to enable chunked encoding.


I assumed this was a problem with the ISAPI redirector, but even if I stopped IIS (and ensured
all w3wp.exe processes have exited) and restarted it, IIS still served an empty response.
I then reconfigured Tomcat to listen on ports 80/443 (since the only sites at IIS listening
on port 80 and 443 were redirected to Tomcat) and restarted Tomcat, so that the websites on
port 80 and 443 were served correctly.
However, after I tried to reproduce the problem (configuring the IIS website to bind to port
88), I could not reproduce the problem anymore - IIS/ISAPI Redirector were now correctly serving
the content.

I have not looked into the raw AJP packets that Tomcat sent to the ISAPI redirector when the
issue happened, as I thought I could reproduce it later, which now is not the case.
Since the problem persisted when restarting IIS, but not when restarting Tomcat, I think this
was a problem with Tomcat and not with the ISAPI Redirector.

Any ideas what could cause this?


Thanks.


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org


Mime
View raw message