Linux连接占用问题
最近遇到个很诡异问题,服务运行一段时间后会无法响应,但是又查不出来问题。。。
后来发现是TCP连接的问题,因为我们是在大陆用香港服务器去连接立陶宛的服务器,网络状况不好的时候连接可能会异常中断,但是实际上系统中端口仍然被这个连接占用,只是客户端被强行断开了,这时其它客户端也无法连接服务端,而服务端被一个假的连接霸占,这时候需要强行杀死当前的连接。
使用Tcpkill工具来关闭霸占的TCP连接
1. 查看哪些连接占用了端口
lsof -i:8989
2. 安装Tcpkill
yum install epel* -y
yum install dsniff -y
3. 关闭某个具体的连接,tcpkill的过滤表达式基于tcpdump的表达式。
tcpkill -i eth0 { expression }
# 删除eth0网卡的所有21端口的出口流量
tcpkill -i eth0 port 21
# 删除192.168.1.2的所有网络包
tcpkill host 192.168.1.2
# 强行关闭em1网卡与193.105.146.6 主机之前的网络包
tcpkill -i em1 -9 ip host 193.105.146.6
因为只是一个临时脚本来拉一些数据,并没有追究具体的解决办法,只是写了一个简易的shell脚本来自动关闭死掉的连接,实际上应该研究一下问题的根源 改进脚本拉数据的代码。。。
后面有空再深究吧。。。