我必须使用 Apache 2.4 来前置各种应用服务器(一开始是 JBoss 6、Tomcat 8 独立版和嵌入到 spring boot 1.2 应用程序中的 Tomcat 8)。因此,我决定使用 mod_proxy(而不是 jk、ajp 或类似的东西)。据我所知,我设置了 Apache 和应用服务器以重用/池化连接。但是当我计算开放端口的数量时,我看到了数千个:
$ netstat | grep :80 | wc -l
4630
(我在 Windows 上,上面的命令是在 Cygwin 中运行的,所以不要混淆。Apache 等以本机方式运行,这意味着没有 cygwin 仿真层)我本来预计可能有 1000 个端口,但不会更多。
这是我的 Apache 反向代理配置:
<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 处于活动状态,我可以使用最多 150 个传入连接,至少这是我从查看服务器状态时判断的...
...
1 requests currently being processed, 149 idle workers
...
..和 Apache 配置:
<IfModule mpm_winnt_module>
ThreadsPerChild 150
MaxConnectionsPerChild 0
</IfModule>
此配置导致 Spring Boot 嵌入的 Tomcat 访问最多 500 个连接:
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
那么为什么有这么多端口?我在另一台电脑上使用 JMeter 运行了负载测试,当我手动计算时,我期望得到以下数字:jmeter->Apache:端口 80 上有 150 个连接 Apache->Tomcat:端口 8080 上有 150 个连接(不能超过 500)Tomcat<-Apache:端口 8080 上有 150 个连接(不能超过 500)
我的设置中是否存在错误,导致端口无法重新使用?