Linux下如何关闭已建立但对应进程已不存在的8088端口连接
Linux下如何关闭已建立但对应进程已不存在的8088端口连接
我之前也碰到过一模一样的情况——明明用命令查到8088端口有一堆ESTABLISHED状态的连接,但去查这些连接对应的PID时,发现进程早就不存在了,这些僵死的连接占着资源确实闹心,下面给你几个实用的解决办法:
第一步:确认无效连接的具体信息
先执行命令筛选出8088端口的已建立连接:
netstat -anp | grep :8088 | grep EST
你会得到类似这样的输出(以你的Hadoop服务器为例):
tcp 0 0 192.83.23.112:42360 192.83.66.114:8088 ESTABLISHED 49627/python tcp 0 0 192.83.23.112:59984 192.83.23.112:8088 ESTABLISHED 52985/python3 tcp 0 0 192.83.23.112:60328 192.83.23.112:8088 ESTABLISHED 55009/python tcp 0 0 192.83.23.112:60118 192.83.23.112:8088 ESTABLISHED 13306/python3 tcp 0 0 192.90.23.112:59976 192.90.23.112:8088 ESTABLISHED 52921/python3
接着用ps -ef验证这些PID是否存活,比如查PID 49627:
ps -ef | grep 49627
如果输出只有grep自身的进程,就说明这个连接对应的进程已经不存在了:
root 58975 121146 0 18:45 pts/18 00:00:00 grep --color=auto 49627
方法一:用tcpkill手动关闭单个/批量无效连接
tcpkill是专门用来终止TCP连接的工具,需要先安装(不同发行版命令略有不同):
- Debian/Ubuntu系:
sudo apt install dsniff - RHEL/CentOS系:
sudo yum install dsniff
关闭单个连接
比如要关闭192.83.23.112:42360 -> 192.83.66.114:8088这个无效连接,执行:
sudo tcpkill -i any host 192.83.23.112 and port 42360 and host 192.83.66.114 and port 8088
批量关闭所有8088端口的无效连接
如果想批量处理,你可以把所有无效连接的源/目标IP和端口提取出来,写成脚本循环执行tcpkill,比如:
netstat -anp | grep :8088 | grep EST | while read line; do pid=$(echo $line | awk '{print $7}' | cut -d'/' -f1) # 检查PID是否存活 if ! ps -p $pid > /dev/null; then src=$(echo $line | awk '{print $4}') dst=$(echo $line | awk '{print $5}') src_ip=$(echo $src | cut -d':' -f1) src_port=$(echo $src | cut -d':' -f2) dst_ip=$(echo $dst | cut -d':' -f1) dst_port=$(echo $dst | cut -d':' -f2) echo "Closing invalid connection: $src -> $dst" sudo tcpkill -i any host $src_ip and port $src_port and host $dst_ip and port $dst_port fi done
方法二:调整内核参数让系统自动回收僵死连接
如果不想手动处理,可以调整TCP内核参数,让系统更快自动回收这些无主的连接:
# 设置孤儿连接的重试次数(默认是8,调小会加快回收) echo 3 | sudo tee /proc/sys/net/ipv4/tcp_orphan_retries # 缩短FIN_WAIT状态的超时时间 echo 30 | sudo tee /proc/sys/net/ipv4/tcp_fin_timeout
如果想让这些参数永久生效,把它们加到/etc/sysctl.conf文件里,然后执行sudo sysctl -p生效。
方法三:重启对应服务(谨慎使用)
如果8088端口对应的是某个服务(比如你的Hadoop ResourceManager),重启服务会强制关闭所有相关连接,但这会影响正在运行的业务,所以只在非业务高峰期或者紧急情况下使用。
备注:内容来源于stack exchange,提问作者King David
相关产品推荐
相关产品推荐

