https://issues.apache.org/bugzilla/show_bug.cgi?id=51298
Bug #: 51298 Summary: throw SocketException when tomcat deal large(300 or 600) concurrent dpwnload file request Product: Tomcat 6 Version: 6.0.28 Platform: PC Status: NEW Severity: normal Priority: P2 Component: Connectors AssignedTo: dev@tomcat.apache.org ReportedBy: amosl...@gmail.com Classification: Unclassified Environment: OS:windows2008, JDK:1.6 Tomcat:6.0.28 How to reproduce it: (1)We have a server running in tomcat. (2)We have a servlet to write file into HttpServletResponse, key code is like this: OutputStream output = resp.getOutputStream(); //get response outputstream ... ... output.write(b, 0, len); // write some file into it, client will receive it (3)Use LoadRunner(Stress testing tool) simulate 300 concurrent HttpRequest, when server received these requests, should write 10M's file content into the response. But, not all request can successfully, some of it disconnected when write file into response. I use log4j record exception like this: ClientAbortException: java.net.SocketException: Connection reset by peer: socket write error at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:358) at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:323) at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:381) at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:370) at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:89) at com.dt.puppet.dp.view.PuppetDownloadView.render(PuppetDownloadView.java:92) at org.nutz.mvc.invoker.ActionInvokerImpl.invoke(ActionInvokerImpl.java:269) at org.nutz.mvc.ActionInvoking.invoke(ActionInvoking.java:37) at org.nutz.mvc.NutMvcContent.handle(NutMvcContent.java:81) at org.nutz.mvc.NutFilter.doFilter(NutFilter.java:57) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) at java.lang.Thread.run(Unknown Source) Caused by: java.net.SocketException: Connection reset by peer: socket write error at java.net.SocketOutputStream.socketWrite0(Native Method) at java.net.SocketOutputStream.socketWrite(Unknown Source) at java.net.SocketOutputStream.write(Unknown Source) at org.apache.coyote.http11.InternalOutputBuffer.realWriteBytes(InternalOutputBuffer.java:741) at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:432) at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:347) at org.apache.coyote.http11.InternalOutputBuffer$OutputStreamOutputBuffer.doWrite(InternalOutputBuffer.java:765) at org.apache.coyote.http11.filters.IdentityOutputFilter.doWrite(IdentityOutputFilter.java:127) at org.apache.coyote.http11.InternalOutputBuffer.doWrite(InternalOutputBuffer.java:574) at org.apache.coyote.Response.doWrite(Response.java:560) at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:353) ... 21 more (4) Here is the server.xml, you can see the parameter: <?xml version="1.0" encoding="UTF-8" standalone="no"?> <Server port="8005" shutdown="SHUTDOWN"> <GlobalNamingResources> <Resource auth="Container" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" name="UserDatabase" pathname="conf/tomcat-users.xml" type="org.apache.catalina.UserDatabase"/> </GlobalNamingResources> <Service> <Connector URIEncoding="UTF-8" acceptCount="1000" connectionTimeout="30000" disableUploadTimeout="true" enableLookups="false" maxHttpHeaderSize="8192" maxPostSize="0" maxSpareThreads="75" maxThreads="1500" minSpareThreads="25" port="80" protocol="HTTP/1.1" redirectport="8443"/> <Engine defaultHost="localhost" name="Catalina"> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> <Host appBase="webapps" autoDeploy="false" deployOnStartup="false" name="localhost" xmlNamespaceAware="false" xmlValidation="false"> <Context cookies="false" docBase="WDM" path="/" reload="false"/> </Host> </Engine> </Service> </Server> When find this exception, I adjust the Tomcat Connector parameter, add these two parameter: maxKeepAliveRequests="-1" keepAliveTimeout=""(test many number) But still have this problem. So, Please tell me what I should do to avoid the exception when write something to response. -- Configure bugmail: https://issues.apache.org/bugzilla/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are the assignee for the bug. --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org