turn off keep alive for your profiler to not give you false positives

 maxKeepAliveRequests="1"


<Connector port="8080" protocol="HTTP/1.1" maxKeepAliveRequests="1"
                connectionTimeout="20000"
                redirectPort="8443" />



On 02/03/2010 02:14 PM, youngm wrote:
(This is a new thread spawned from my "Tomcat 6.0.24 Google Chrome" thread
with better information)

I'm running Tomcat 6.0.24, Sun JDKx86 6u18, Windows 7 64, Firefox and Chrome
browser.

I've noticed that for about the first 1-3 min after my tomcat instance has
started some of my requests that normally take>  1 sec to be handled are
taking 30+ sec to respond.

I've narrowed the problem down to my use of an Executor pool to handle
requests.  The follwing is my server.xml:

<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN">
   <Listener className="org.apache.catalina.core.JasperListener" />
   <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener"
/>
   <Listener
className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
   <Service name="Catalina">
     <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
         maxThreads="150" minSpareThreads="4"/>
      <Connector executor="tomcatThreadPool"
                port="8080" protocol="HTTP/1.1"
                connectionTimeout="20000"
                redirectPort="8443" />
     <Engine name="Catalina" defaultHost="localhost">
       <Host name="localhost"  appBase="webapps">
       </Host>
     </Engine>
   </Service>
</Server>

If I change<Connector/>  to not use and executor like so:

<Connector port="8080" protocol="HTTP/1.1"
                 connectionTimeout="20000"
                 redirectPort="8443" />

I don't experience a problem.

I've hooked a profiler up and it appears all of the time is being spent
doing a socketRead with the following trace:

[Wall Time]  java.net.SocketInputStream.socketRead0(FileDescriptor, byte[],
int, int, int)
java.net.SocketInputStream.read(byte[], int, int)
org.apache.coyote.http11.InternalInputBuffer.fill()
org.apache.coyote.http11.InternalInputBuffer.parseRequestLine()
org.apache.coyote.http11.Http11Processor.process(Socket)

I've tried to analyse the network info with wireshark and see no decernable
differences in network traffic between the 2 requests.  I can try analyzing
wireshark data further if the list thinks that would be useful.  Though I
find it strange that it works fine when not using an Executor.

Anyone have any ideas or seen similar behaviour?

Thanks,
Mike


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to