Rootop 服务器运维与web架构

会话中有大量 CLOSE_WAIT

| 暂无评论

       服务器出现ddos攻击,服务器apache进程数严重超过日常平均数,查看会话状态,有大量的CLOSE_WAIT状态会话。

解决方法:

vi /etc/sysctl.conf
# Decrease the time default value for tcp_fin_timeout connection
net.ipv4.tcp_fin_timeout = 30
# Decrease the time default value for tcp_keepalive_time connection
net.ipv4.tcp_keepalive_time = 1800
# 探测次数
net.ipv4.tcp_keepalive_probes=2
# 探测监控秒数
net.ipv4.tcp_keepalive_intvl=2
保存退出后执行:sysctl -p

以上为修改系统参数,告诉内核及时的断掉CLOSE_WAIT会话。

其次在前端防火墙中配置规则,加了一条:

从any来到服务器IP去,每IP并发会话数为100

##以下内容来源于网络搜集

CLOSE_WAIT状态的生成原因首先我们知道,如果我们的Client程序处于CLOSE_WAIT状态的话,说明套接字是被动关闭的!因为如果是Server端主动断掉当前连接的话,那么双方关闭这个TCP连接共需要四个packet:

Server —> FIN —> Client

Server <— ACK <— Client

这时候Server端处于FIN_WAIT_2状态;而我们的程序处于CLOSE_WAIT状态。

Server <— FIN <— Client这时Client发送FIN给Server,Client就置为LAST_ACK状态。

Server —> ACK —> Client

Server回应了ACK,那么Client的套接字才会真正置为CLOSED状态。
我们的程序处于CLOSE_WAIT状态,而不是LAST_ACK状态,说明还没有发FIN给Server,那么可能是在关闭连接之前还有许多数据要发送或者其他事要做,导致没有发这个FIN packet。
原因知道了,那么为什么不发FIN包呢,难道会在关闭己方连接前有那么多事情要做吗?还有一个问题,为什么有数千个连接都处于这个状态呢?难道那段时间内,服务器端总是主动拆除我们的连接吗?

原创文章,转载请注明。本文链接地址: https://www.rootop.org/pages/572.html

作者:Venus

服务器运维与性能优化

发表回复