On 02/11/2020 12:16, Eric Robinson wrote: <snip/>
> Gotcha, thanks for the clarification. Let's see what happens when the users > start hitting it at 8:00 am Eastern. Progress. The first attempt to write to the socket triggers the following exception: 02-Nov-2020 14:33:54.083 FINE [http-bio-3016-exec-13] org.apache.tomcat.util.net.JIoEndpoint$DebugOutputStream.write [301361476] java.net.SocketException: Bad file descriptor (Write failed) at java.net.SocketOutputStream.socketWrite0(Native Method) at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:111) at java.net.SocketOutputStream.write(SocketOutputStream.java:155) at org.apache.tomcat.util.net.JIoEndpoint$DebugOutputStream.write(JIoEndpoint.java:1409) at org.apache.coyote.http11.InternalOutputBuffer.realWriteBytes(InternalOutputBuffer.java:247) at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:480) at org.apache.coyote.http11.InternalOutputBuffer.endRequest(InternalOutputBuffer.java:183) at org.apache.coyote.http11.AbstractHttp11Processor.action(AbstractHttp11Processor.java:761) at org.apache.coyote.Response.action(Response.java:174) at org.apache.coyote.Response.finish(Response.java:274) at org.apache.catalina.connector.OutputBuffer.close(OutputBuffer.java:322) at org.apache.catalina.connector.Response.finishResponse(Response.java:537) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:480) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1083) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:640) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:321) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748) Because this is an instance of an IOException, Tomcat assumes it has been caused by the client dropping the connection and silently swallows it. I'll be changing that later today so the exception is logged as DEBUG level for all new Tomcat versions. Possible causes of "java.net.SocketException: Bad file descriptor" I've been able to find are: 1. OS running out of file descriptors. 2.Trying to use a closed socket. I want to review the source code to see if there are any others. I don't think we are seeing 2 as there is no indication of the Socket, InputStream or OutputStream being closed in the logs. That leaves 1. Possible causes here are a file descriptor leak or normal operations occasionally needing more than the current limit. I don't think it is a leak as I'd expect to see many more errors of this type after the first and we aren't seeing that. That leaves the possibility of the current limit being a little too low. My recommendation at this point is to increase the limit for file descriptors. Meanwhile, I'll look at the JRE source to see if there are any other possible triggers for this exception. Mark --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org