我在apache中的mpm事件模块上遇到了问题。对于我们的客户,我们有一个apache / lucee网络服务器。 Apache充当lucee Web服务器代理的传递功能。
我们似乎遇到了导致apache保持线程锁定的问题。我注意到了这一点,因为我使用了apache中内置的服务器状态功能。
我已经修改了用于mpm-event模块的conf文件,它的当前位置如下:
StartServers 16
MinSpareThreads 480
MaxSpareThreads 480
ThreadsPerChild 30
MaxRequestsPerChild 1000
MaxClients 480
ThreadLimit 64
ServerLimit 16
该服务器是ubuntu 18.04,具有4个内核和16GB的ram,它已安装apache 2.4.29,lucee 5.3.4.37和一个通过pm2运行的nodejs v11.2.0服务。
我在jMeter上进行了一些负载测试,一切都表现得很好。这只是阿帕奇,似乎没有放开线程。在大多数情况下,它们保持状态为“ R”阅读请求,“ W”发送答复或“ G”正常完成。一旦连接数量饱和,apache就会挂起,我需要重新启动apache服务。
______R______________________________________............G..__RR
R___R____________________________________R______________RRRRRR_R
R___RR________RRRRRW__RR_____________.GGGGGGG....G...G.....G....
.......G.G...G..G.......G....G.........G.G......
我检查了Apache错误日志,但找不到任何东西。 lucee错误日志和nodejs错误日志相同。
我已经阅读了很多与此相关的主题,并尝试了几乎所有可以找到的解决方案。现在已经进行了一段时间,所以我可能不记得我已经尝试过的所有内容。
感谢任何输入。
编辑: 我将按以下方式连接到lucee:
TimeOut 50
ProxyTimeout 30
ProxyBadHeader IsError
ProxyPreserveHost On
ProxyPassMatch ^/(.+\.cf[cm])(/.*)?$ ajp://127.0.0.1:8009/$1$2 connectiontimeout=2 timeout=30 retry=30 ttl=30
ProxyPassMatch ^/(.+\.cfml)(/.*)?$ ajp://127.0.0.1:8009/$1$2 connectiontimeout=2 timeout=30 retry=30 ttl=30
EDIT2:我可能已经找到了解决该问题的方法,尽管可能不是最好的方法。看来,当您在apache中禁用KeepAlive属性时,连接/线程将按应有的方式被释放...