You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by youngm <yo...@gmail.com> on 2010/02/03 22:14:55 UTC
Slow requests when using "Executor" pool
(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
--
View this message in context: http://old.nabble.com/Slow-requests-when-using-%22Executor%22-pool-tp27443550p27443550.html
Sent from the Tomcat - User mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org
Re: Slow requests when using "Executor" pool
Posted by youngm <yo...@gmail.com>.
Setting maxKeepAliveRequests="1" seems to fix the issue as well. Perhaps the
problem has something to do with keep alive requests? Any other thoughts?
Mike
Filip Hanik - Dev Lists wrote:
>
> 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-unsubscribe@tomcat.apache.org
> For additional commands, e-mail: users-help@tomcat.apache.org
>
>
>
--
View this message in context: http://old.nabble.com/Slow-requests-when-using-%22Executor%22-pool-tp27443550p27503897.html
Sent from the Tomcat - User mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org
Re: Slow requests when using "Executor" pool
Posted by Filip Hanik - Dev Lists <de...@hanik.com>.
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-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org