linux下短链接出现TIME_WAIT耗尽端口号的解决方法

简介:

最近使用C++开发libcurl库访问OpenSearch程序,出现”Cannot assign requested address”错误,大量请求错误。Google后问题集中在linux下的TIME_WAIT上。

      出现TIME_WAIT的原因是短连接耗尽了系统的socket端口号,新的连接分配不到端口号,所以才产生的上述错误。

      短链接耗尽端口号的原因得从TCP/IP的底层说起。


      TCP/IP关闭链接时会使用我们通常所属的4次握手协议,这是就出现了服务端确认关闭链接后客户端发送确认后还需要等待一段时间,这段时间客户端会把链接置为TIME_WAIT状态,通常TIME_WAIT时间为2个msl,大概为60s左右,根据服务器设置而不同。

       出现TIME_WAIT后会导致网络访问缓慢,请求失败等一系列的问题。为了解决这个问题就需要设置TIME_WAIT的时间。在网上搜了一大圈,方法都几种在修改内核参数,修改的方式如下(实验以后是没有生效,解决不了问题,贴出来供大家参考):

       使用命令:vi /etc/sysctl.conf

       编辑文件,加入以下内容:

       net.ipv4.tcp_syncookies = 1

       net.ipv4.tcp_tw_reuse = 1

       net.ipv4.tcp_tw_recycle = 1

       net.ipv4.tcp_fin_timeout = 30

       然后执行/sbin/sysctl -p让参数生效。

net.ipv4.tcp_syncookies = 1表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;

net.ipv4.tcp_tw_reuse = 1表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;

net.ipv4.tcp_tw_recycle = 1表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。

net.ipv4.tcp_fin_timeout修改系統默认的TIMEOUT时间

      最后问了小康,最终搞定了,实在感谢小康。其实修改关键的内核参数是下面的:

      net.ipv4.tcp_tw_timeout = 3

     修改这个参数以后让链接关闭以后处在TIME_WAIT 3s的时间。这个再看网络链接,数量已经大大降低,从原先耗尽的端口,现在高并发访问最多占用4000个端口。

     分析一下第一种修改的timeout参数,从参数名称上就可以看出来,其实是FIN_WAIT的时间,并不是TIME_WAIT的时间。只是协议里边第一次等待的时间。为什么修改的net.ipv4.tcp_tw_recycle = 1这个参数不起作用现在也还没有搞清楚。

目录
相关文章
|
2月前
|
监控 Linux
如何检查 Linux 内存使用量是否耗尽?这 5 个命令堪称绝了!
本文介绍了在Linux系统中检查内存使用情况的5个常用命令:`free`、`top`、`vmstat`、`pidstat` 和 `/proc/meminfo` 文件,帮助用户准确监控内存状态,确保系统稳定运行。
583 6
|
8天前
|
关系型数据库 MySQL Linux
Linux下mysql数据库的导入与导出以及查看端口
本文详细介绍了在Linux下如何导入和导出MySQL数据库,以及查看MySQL运行端口的方法。通过这些操作,用户可以轻松进行数据库的备份与恢复,以及确认MySQL服务的运行状态和端口。掌握这些技能,对于日常数据库管理和维护非常重要。
41 8
|
5月前
|
网络协议 Linux
Linux查看端口监听情况,以及Linux查看某个端口对应的进程号和程序
Linux查看端口监听情况,以及Linux查看某个端口对应的进程号和程序
743 2
|
5月前
|
Linux
Linux下使用ls查看文件颜色全部为白色的解决方法,以及Linux中文件颜色介绍
Linux下使用ls查看文件颜色全部为白色的解决方法,以及Linux中文件颜色介绍
215 2
|
2月前
|
缓存 Java Linux
如何解决 Linux 系统中内存使用量耗尽的问题?
如何解决 Linux 系统中内存使用量耗尽的问题?
166 48
|
2月前
|
缓存 Linux
如何检查 Linux 内存使用量是否耗尽?
何检查 Linux 内存使用量是否耗尽?
|
2月前
|
安全 Linux 网络安全
Linux 开放的端口太多了?教你一招找出所有开放的端口,然后直接干掉!
在 Linux 系统中,端口管理至关重要。本文介绍了如何使用 `netstat`、`lsof` 和 `nmap` 等工具查找开放端口,并通过关闭相关服务、修改防火墙规则或禁用网络接口来关闭这些端口,以提高系统安全性。注意不要随意关闭重要端口,谨慎操作并备份数据。
44 3
|
3月前
|
安全 Linux 数据安全/隐私保护
Linux 忘记密码解决方法
Linux 忘记密码解决方法
59 2
Linux 忘记密码解决方法
|
3月前
|
运维 Linux
Linux查找占用的端口,并杀死进程的简单方法
通过上述步骤和命令,您能够迅速识别并根据实际情况管理Linux系统中占用特定端口的进程。为了获得更全面的服务器管理技巧和解决方案,提供了丰富的资源和专业服务,是您提升运维技能的理想选择。
106 1
|
3月前
|
网络协议 安全 Linux
阿里云国际上如何检查 Linux 上正在使用哪些端口
阿里云国际上如何检查 Linux 上正在使用哪些端口