I want to contribute a custom SocketFactory allowing to analyze the utilization of acceptConnection attribute of a Connector. In a properly configured production system, there should be rare situations where connections wait for a worker thread to be handled. Our client complained on high latency of web requests, but the measurement on servlet did not show high latency. So we wanted to know the number of connections which wait in socket backlog and were not accepted yet. I solved this problem by writing a custom SocketFactory, which accepts connections immediately and puts it in my queue until a call to accept() will take them. So the number of waiting connections can be monitored via JMX. To activate this factory, the declaration of the corresponding Connector in server.xml should be changed like in the following example. <Connector port="8080" maxHttpHeaderSize="8192" maxThreads="10" minSpareThreads="5" maxSpareThreads="7" enableLookups="false" redirectPort="8443" acceptCount="10" connectionTimeout="2000" disableUploadTimeout="true" socketFactory="org.apache.tomcat.util.net.BacklogMeasuringServerSocketFactory"/> No changes in existing classes are required. Please review the code in the attachment.
Created attachment 21373 [details] contribution patch
The code has moved on since this patch was provided. Applying it - or something like it - would require significant refactoring.