On 24.02.2009 21:50, Daryl Stultz wrote:
I'm running Tomcat 5.5.17 behind Apache 2.2.2. I am connecting with a Tomcat
AJP connector like so:

  <Connector port="8009" enableLookups="false" redirectPort="8443"
protocol="AJP/1.3" />

and Apache ProxyPass like so:

ProxyPass /myapp ajp://localhost:8009/myapp/

Apache has the default number of connections set - MaxClients is either 256
or 150, I don't understand the prefork/worker MPM thing. As above, the

You need to understand it.

prefork MPM: only uses processes, not multiple threads per process. Each request being processed occupies one process. Each process can only handle one rquest at a time. Scaling up and down via creating additional processes or stopping idle ones.

worker MPM: Uses multi-threaded processes, each with the same number of (configured) threads, by default 25. Each request being processed occupies one thread, each process can handle multiple threads concurrently (as many as you configured threads per process). Scaling up and down via creating additional processes or stopping idle ones.

winnt MPM: Only on windows. Uses two processes, one is a watchdog (it does also exist for prefork and worker) and the other one is highly multithreaded (default 150 threads) and does all the requests. Like worker with one fixed worker process using much more threads in this process. No scaling up and down.

You can check your MPM by calling "httpd -V". The output will contain a line like

 -D APACHE_MPM_DIR="server/mpm/worker"

Tomcat AJP connector defaults to 200 for maxThreads. The site has 20

Defaults? I think no, and you haven't configured 200 in your abive config snippet.

applications, each with 2 ProxyPass directives for ports 80 and 443. The

Hmm, not sure, how ports 80 and 443 with HTTP(s) proxying come into play now.

general load on the site is low with 5 - 15 users on at any one time.

This command here, I believe, counts the number of connections between
Apache and Tomcat:

netstat -tn | sed -n -e| wc -l

What's you platform?

The command counts LISTEN (the listening socket), the 2 header lines, all ESTABLISHED connections (those are the ones you are after) and e.g. also TIME_WAIT connections, all of them together. You need to count more specific.

Depending on your idle timeouts on the AJP connections, you might have many more TIME_WAITs than ESTABLISHED. For the idle timeouts, see the mod_proxy docs page for httpd and connectionTimeout for the Tomcat AJP connector. Consider upgrading httpd to 2.2.11, because mod_proxy_ajp was very new in 2.2.2 and there have been a couple of fixes after that version.

The site has been running for a couple years, though the code changes and I
continue to add new apps, it has been running fine. Now what seems to be
happening is the number of connections between Apache and Tomcat grows at
various rates from 4 or 10 or 20 after an Apache restart to 400 and more. At
around 400 the site gets very sluggish. This seems to make some sense if
Tomcat has maxThreads of 200 and the above command counts connections in
both directions - TC is running out of connections. The question is why? I
don't have enough users to warrant the connection pool growing like this. I
currently have a cron task that does a graceful restart of Apache after 300
connections. Can anyone shed some light on this or point me to some other
resource for help?

First check, whether it is really ESTABISHED connections. Then configure reasonable timeouts as described in the mod_proxy documentation and an additional connectionTimeout for Tomcat.

Regards,

Rainer

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

Reply via email to