> -----Original Message----- > From: Konstantin Preißer [kpreis...@apache.org] > Sent: Thursday, December 26, 2013 1:28 PM > To: 'Tomcat Users List' > Subject: RE: Request Timeout and empty post data issue > >Hi, > >> -----Original Message----- >> From: Peter Rifel [mailto:pri...@mixpo.com] >> Sent: Thursday, December 26, 2013 9:45 PM >> To: users@tomcat.apache.org >> Subject: Request Timeout and empty post data issue >> >> Hello, >> >> I'm currently running Tomcat 7.0.42 on Ubuntu 12.04 with OpenJDK 1.7.0_25. >> I'm using Apache Tomcat Native library 1.1.27 with APR version 1.4.6. >> >> I'm noticing in my access logs that some of our POST requests don't have any >> POST data and all have response times of a few ms over 20000ms. I'm trying >> to figure out whether this issue is client side or server side. The response >> code and response size for these requests are normal. Can anyone tell me >> under what circumstances this would happen? I noticed that our connector's >> connectionTimeout is set to 20000ms, but it wouldn't make sense for that >> value to be a part of this issue because a connection timeout only occurs >> when the URI hasn't been received by tomcat in that amount of time, which >> is clearly not happening here (I was able to confirm this with telnet; a >> connection timeout will not write anything to the access logs). >> >> The "request" is making it to my servlet (logging confirms this) but for some >> reason tomcat doesn't see any request parameters and all of the response >> times in our access logs are just above 20 seconds. Does this mean that my >> servlet is taking 20 seconds to process the request? Is there some other >> timeout value somewhere that defaults to 20 seconds? Is there a way for >> me to see exactly what is taking so long? Its incredibly hard to debug this >> because we cant reproduce this bug on our own without any post data and >> <1% of our production traffic is having this issue. To try and gather more >> info >> on this, I added a servlet filter that logs all of our POST request >> parameters to >> the access log and I can confirm that there are no parameters on these >> specific requests. >> >> The lack of post data makes me think its a client issue, but that doesn't >> explain why all of these requests take ~20 seconds to be processed. >> >> I'd appreciate any ideas on what could cause this. > >Did you try to set the "connectionTimeout" to some other value to see if the >requests still take ~ 20s? > >I just tested with Tomcat 7.0.47 and HTTP APR connector, and for me the >"connectionTimeout" value is also applied when reading the POST data: When the >client does not send a byte in this interval (20s), then this will trigger >some timeout error. > >E.g., if you send the following POST request without a body (2x CR LF after >the last header): > >POST /MyWebapp/PostServlet HTTP/1.1 >Host: localhost >Connection: keep-alive >Content-Length: 999 >Content-Type: application/x-www-form-urlencoded > > >Then after the connectionTimeout interval, an java.net.SocketTimeoutException >occurs at org.apache.catalina.connector.CoyoteInputStream.read (e.g. when you >directly read the Request input stream), so that Tomcat doesn't wait forever >for further data when the client is already gone. Note that the exception did >not occur when I called request.getParameter("xxx") - it just returned null. > >It could be possible that a client sends a request with complete headers, but >when sending the POST body the client waits too long so that Tomcat applies >the connectionTimeout before the full request body is received. The request >will then be logged as the request headers where completely received. > > >Regards, >Konstantin Preißer >
Konstantin, I changed the connectionTimeout and that value is being reflected in our access logs. So this means that tomcat is not receiving a body with the POST request, indicating a client-side or network problem? We never read the input stream directly, we only use getParameter so that would explain why our servlet isn't throwing a SocketTimeoutException. It would be nice if the connectionTimeout documentation could mention this scenario as well. Thank you for your quick response! Peter Peter --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org