I have to front various application servers (in the beginning this will be JBoss 6, Tomcat 8 standalone and Tomcat 8 embedded into spring boot 1.2 apps) with an Apache 2.4. Because of this I decided to go for mod_proxy (and not jk, ajp or something like this). From what I know I set up Apache and the application servers to reuse / pool connection. But when I count the number of open ports I see several thousands:
$ netstat | grep :80 | wc -l
4630
(I am on Windows, the command above was run in Cygwin, so don't be confused. Apache etc run native, that means without cygwin emulation layer) I would have expected perhaps a thousand ports, but not more.
This is my Apache reverse proxy config:
<VirtualHost *:80>
ServerAdmin ...
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / http://localhost:8080/ connectiontimeout=5 timeout=30
ProxyPassReverse / http://localhost:8080/
ServerName ...
ErrorLog "logs/foo.log"
CustomLog "logs/foo-access.log" common
</VirtualHost>
MPM is active and I can use up to 150 incoming connections, at least this is what I judge from looking at server-status ...
...
1 requests currently being processed, 149 idle workers
...
.. and the Apache config:
<IfModule mpm_winnt_module>
ThreadsPerChild 150
MaxConnectionsPerChild 0
</IfModule>
This configuration causes the Spring Boot embedded Tomcat to access up to 500 connections:
server.tomcat.access-log-pattern=%h %l %u %t %I "%r" %s %b %D
server.tomcat.access-log-enabled=true
server.tomcat.max-threads=500
server.tomcat.basedir=./tomcat
So why are there so many ports ? I ran a load test with JMeter from another PC and when I calculate manually I would expect these figures: jmeter->Apache: 150 connections on port 80 Apache->Tomcat: 150 connections on port 8080 (can not exceed 500) Tomcat<-Apache: 150 connections on port 8080 (can not exceed 500)
Is there an error in my setup which causes ports not to be re-used ?