Linux服务器网络阻塞是指服务器网络带宽被占满、网络请求处理不及时,导致整体网络传输效率下降的问题,会直接影响部署在服务器上的各类服务的可用性。

网络阻塞的常见表现
当Linux服务器出现网络阻塞时,通常会有以下典型表现:
- 服务响应延迟明显升高,用户访问页面或调用接口需要等待很久
- 服务器出现大量TCP连接超时、连接重置的错误日志
- 远程连接服务器时卡顿明显,甚至频繁断开连接
- 监控工具显示服务器网络带宽使用率长期处于高位
网络阻塞的排查步骤
1. 查看整体网络带宽使用情况
首先可以通过iftop工具实时查看服务器的网络流量情况,确认是否有带宽被占满的情况。如果没有安装该工具,可以先通过包管理器安装:
# CentOS/RHEL系统安装iftop yum install -y iftop # Ubuntu/Debian系统安装iftop apt-get install -y iftop # 运行iftop查看实时网络流量,按q退出 iftop
运行后可以直观看到每个连接的发送和接收速率,找到占用带宽最高的连接对应的IP和端口。
2. 排查异常连接和进程
可以通过netstat或者ss命令查看当前的网络连接状态,找到异常的连接和对应的进程:
# 查看所有TCP连接及对应的进程PID ss -antp # 查看指定端口对应的进程,比如查看80端口的进程 ss -antp | grep :80
如果发现大量来自同一IP的连接,或者某个进程占用了异常高的网络资源,就可以初步定位问题来源。
3. 抓包分析流量内容
如果需要进一步分析网络流量的具体内容,可以使用tcpdump工具进行抓包:
# 抓取eth0网卡所有流量,保存到capture.pcap文件 tcpdump -i eth0 -w capture.pcap # 抓取指定IP的流量,比如抓取来自192.168.1.100的流量 tcpdump -i eth0 src host 192.168.1.100
抓取到的pcap文件可以用Wireshark工具在本地分析,确认流量是否为正常业务流量。
网络阻塞的具体处理措施
1. 限制异常流量
如果确认是某个IP发送了大量异常请求导致阻塞,可以通过iptables工具限制该IP的访问:
# 禁止指定IP访问服务器所有端口 iptables -A INPUT -s 192.168.1.100 -j DROP # 限制指定IP每秒最多10个新连接 iptables -A INPUT -s 192.168.1.100 -p tcp -m tcp --dport 80 -m limit --limit 10/sec -j ACCEPT iptables -A INPUT -s 192.168.1.100 -p tcp --dport 80 -j DROP # 保存iptables规则,避免重启后失效 service iptables save
2. 优化系统网络参数
可以通过调整Linux内核的网络相关参数,提升服务器处理网络请求的能力,缓解阻塞问题:
# 编辑sysctl配置文件 vim /etc/sysctl.conf # 添加以下参数 # 增加TCP连接队列长度 net.core.somaxconn = 4096 # 开启TCP连接复用 net.ipv4.tcp_tw_reuse = 1 # 减少TCP连接超时时间 net.ipv4.tcp_fin_timeout = 30 # 增加系统最大文件描述符数量 fs.file-max = 6553560 # 生效配置 sysctl -p
3. 升级带宽或做负载均衡
如果阻塞是因为业务正常增长导致带宽不足,可以考虑升级服务器的网络带宽,或者对服务做负载均衡,将流量分摊到多台服务器上,避免单台服务器带宽被打满。
4. 清理无效连接
如果存在大量处于TIME_WAIT状态的TCP连接占用资源,可以通过系统参数优化或者手动清理的方式处理:
# 查看当前TIME_WAIT连接数量 ss -ant | grep TIME_WAIT | wc -l # 调整内核参数快速回收TIME_WAIT连接 echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle
日常预防建议
为了避免网络阻塞问题反复出现,可以做好以下日常运维工作:
- 部署网络监控工具,实时关注服务器带宽使用率和连接数变化,设置阈值告警
- 对服务器对外开放的端口做访问控制,只开放必要的端口,避免不必要的暴露
- 定期排查服务器上的异常进程,避免恶意程序占用网络资源
- 对核心业务做流量限制和熔断机制,避免突发流量打垮服务器