"Michael Echerer" <m...@tngtech.com> wrote in message 
news:49426119.3060...@tngtech.com...
> Hello,
>
> I'm currently analysing issues with a quite old Tomcat 5.5.17, mod_jk
> 1.2.15 and Apache 2.0.55 loadbalanced setup with 4 Apaches (worker.c)
> and 4 Tomcats.
>
> Questions are:
> * Can anyone explain why Apache SYN requests to Tomcat don't get
> answered (probably this happens only if maxClients exceeds Tomcat AJP
> pool sizes).

That is the most likely reason, but there are other possibilities that 
should show up in your Tomcat logs.

> * Shouldn't the AJP thread pool shrink to maxSpareThreads, if idle, or
> will threads stay open if Apache ever requested them?
>

With the default settings, the threads will stay open if Apache ever 
requested them.  With a version this old, you probably want to specify a 
connectionTimeout="xxxxxx" in the <Connector protocol="AJP/1.3" ... /> 
element to allow threads to die if they aren't reused in a timely manor.  In 
this case, you probably also want to configure mod_jk to use CPING/CPONG so 
that it can detect that the thread went away.

Of course upgrading Tomcat makes available the APR and (experimental) NIO 
AJP/1.3 connectors, which allow a huge number of connections without tying 
up threads.

> Currently there are 4 Apaches, 2 with
>
> StartServers         2
> MaxClients         300
> MinSpareThreads     25
> MaxSpareThreads     75
> ThreadsPerChild     25
> MaxRequestsPerChild  0
>
> and 2 more with
>
> StartServers         2
> MaxClients         200
> MinSpareThreads     25
> MaxSpareThreads     75
> ThreadsPerChild     25
> MaxRequestsPerChild  0
>
> that have problems with hung SYN requests when getting near the 4
> Tomcat's default AJP thread pool size of 200.
>
> Current guess was that it's simply a bad idea to have 2*300+2*200=1000
> maxClients on Apache side and just 4*200=800 AJP threads (if evenly
> balanced) on Tomcat side.
>

With the default settings, yes this is a bad idea ;).  You need to have at 
least as many AJP threads as maxClients+1 in the default case.

> So firstly increased Tomcat threads to maxThreads=500 to find some peak.
> All other AJP connector settings are default, resp. not defined.
>
> Meanwhile we log the JMX currentThreadCount for the AJP-Pools and the
> thread count only increases. However even after peak hours the
> currentThreadCount does not decrease. However would expect to get back
> to the maxSpareThreads default of 50 during night time.
>

See above.  The thread count will never go down without specifying a 
connectionTimeout.

> Can anyone explain why the AJP thread count stays high? I saw that one
> could configure mod_jk connection_pool_timeout which is not done yet.
> Could that be the reason for the thread pool never reducing the thread
> count even though the AJP thread pool has a maxSpareThread setting (i.e.
> doesn't this have an effect without pool timeout?)?
>

I've never tried to do this on the mod_jk side, but the archives suggest it 
doesn't work well.

> What could be the reason for SYN requests of the Apache that never get
> answered by Tomcat?
>

That the thread-pool is exhausted is the most common reason.  But since the 
default AJP Connector answers the request on the current thread and spawns 
another thread to go back and listen for connections there are other reasons 
(e.g. an OOME when spawning the thread) why it might fail.  However it 
should say in the Tomcat logs what the problem is.

> Thanks,
> Michael Echerer
>
>
> -- 
> TNG Technology Consulting GmbH, Betastr. 13a, D-85774 Unterföhring
> Geschäftsführer: Henrik Klagges, Gerhard Müller, Christoph Stock
> Amtsgericht München, HRB 135082 




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

Reply via email to