我们有一个3服务器的集群设置,在所有3台服务器上,weblogic正在运行以托管网站。在weblogic的顶部使用Apache作为负载均衡器。
去年,我将Apache服务器从2.4.9升级到2.4.29。在升级之前,一切正常,但每2-4周Apache挂起一次升级。网站变得不可访问,在检查服务器时,我们没有看到任何错误--事实上,当apache挂起它时,它也停止了日志记录。
我们监测并发现没有异常的内存使用,没有可疑类型的请求到网站,没有可疑的进程运行之前,问题发生。
通过在互联网上的探索,我发现这个问题可能与MPM配置有关。Apache使用的是事件MPM,但我发现事件MPM配置没有在apache配置中声明,我认为在升级期间,默认配置被旧配置所取代。
因此,我们已经修改了MPM配置,以使用下面的事件mpm配置,并且这一更改起了作用。在接下来的6个月里,我们没有面对这个问题。
StartServers 4 MinSpareThreads 256 MaxSpareThreads 512 ThreadsPerChild 64 MaxRequestWorkers 2048 MaxConnectionsPerChild 0 我们认为它是固定的,但现在6个月后Apache再次挂起,只有症状,我们可以看到closed_wait连接从20增加到550在接下来的1小时,没有访问网站,apache停止登录到它的ssl和错误日志,我们没有看到任何异常行为在不同的运行过程数据,内存使用,也没有看到任何可疑的请求之前,问题发生。
发布于 2021-02-10 20:52:44
这是一个常见的问题。CLOSE_WAIT连接不是在使用,而是在消耗apache资源。
一段时间前,我遇到了紧密的等待连接问题。经过大量的调查,这是一个技巧,以防你需要它。
您将需要将此添加到您的Linux服务器中。
vi /etc/sysctl.conf
#Added to fix close_wait connections
#recommended 30. Default 60
net.ipv4.tcp_fin_timeout = 30
#in seconds, time in which the close_wait connections will be removed
net.ipv4.tcp_keepalive_time = 60
###duration of a request in seconds# probes * intvl = time to process if the connection is still alive
net.ipv4.tcp_keepalive_intvl = 2
#number of retries to test the connection
net.ipv4.tcp_keepalive_probes = 2此外,应用此操作后,需要使用sysctl -p命令刷新对该文件的引用。
之后,您必须在代理通行证中添加keepalive=On指令。
ProxyPass /home ajp://localhost:8009/home keepalive=On retry=5这将有助于在处于close_wait状态一分钟后删除CLOSE_WAIT连接。Apache在worker模式下使用线程,而这些线程由操作系统处理,如果系统无法关闭线程,系统就会这样做。
记住也要重新启动整个apache进程。
PD:如果您正在使用ipv4,这会有所帮助。不确定ipv6
希望它能帮上忙
发布于 2019-06-26 11:02:49
它看起来像是使用像slowloris这样的工具的“缓慢的DoS攻击”。在这种类型的攻击中,攻击者试图在服务器挂起之前保持与服务器的合法连接(打开)。我们使用SPA ( https://www.cyberxnetworks.com/index.php?cmd=website&aid=242 )来阻止这类攻击。
https://serverfault.com/questions/972940
复制相似问题