Linux C++ Socket 高并发短连接 TIME_WAIT 挥之不去解决方法

摘要:
当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;net.ipv4.tcp_tw_reuse=1表示开启重用。允许将TIME-WAITsockets重新用于新的TCP连接,默认为0,表示关闭;net.ipv4.tcp_tw_recycle=1表示开启TCP连接中TIME-WAITsockets的快速回收,默认为0,表示关闭。net.ipv4.tcp_fin_timeout修改系統默认的TIMEOUT时间完成后使用netstat-an神奇的发现...这些链接都不见了继续运行我的高并发Socket持续查看netstat效果明显呐~!

近期遇到一个项目 需要在Linux上建立一个Socket 进行 HTTP_GET , 需要线程高并发的 使用TCP Socket 进行Send 发送HTTP_GET请求到 指定网站 . 而且不需要read数据返回 一旦Send完毕就直接close了, 但这样做却在本地产生了很多 TIME_WAIT 状态 导致端口堵塞无法高并发连接了 .

在网上找了很多资料, 都说到了这点 高并发短连接的close 需要双发达成 才能进入CLOSE状态, 如果只有一段 Close(sock) 只会带来另一端的 数据接收环节等待. 迟迟不会结束TIME_WAIT, 而他需要4分钟后 才会注销这个状态. 4分钟呐. 要人命啊

结果我找到的方法 却不是改写Socket程序 而是在系统设置上下载, 却解决了.

Console

sysctl -w net.ipv4.tcp_syncookie=1
sysctl -w net.ipv4.tcp_tw_reuse=1
sysctl -w net.ipv4.tcp_tw_recycle=1
sysctl -w net.ipv4.tcp_fin_timeout=30

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 时间

完成后 使用netstat -an 神奇的发现... 这些链接都不见了

继续运行我的高并发Socket 持续查看netstat 效果明显呐~!~!~!

免责声明:文章转载自《Linux C++ Socket 高并发短连接 TIME_WAIT 挥之不去解决方法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇7/8段码管(LED)Java获取请求客户端的真实IP地址下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Linux(Ubuntu):搭建GitLab托管代码

GitLab 简介: GitLab 是利用 Ruby on Rails 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面进行访问公开的或者私人项目。它拥有与 Github 类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。团队成员可以利用内置的简单聊天程序...

跟阿铭学Linux习题答案

第一章:走进Linux 1、简述它的发展历史,列举几种代表性的发行版 Linux之前是Unix,由于Unix收费昂贵,so,Richard Stallman 发起了开发自由软件的运动,并成立了自由软件基金会(Free Software Foundation,FSF)和GNU 项目和协议GPL(是GNU General Public License)。之后一...

Linux:PS命令详解与使用

Linux下PS命令详解  https://www.cnblogs.com/softidea/p/5274988.html Linux:PS命令详解与使用https://www.cnblogs.com/moonbaby/p/10528443.html 要对系统中进程进行监测控制,查看状态,内存,CPU的使用情况,使用命令:/bin/ps (1)ps :是显...

linux安装zlib拓展

如果缺少zlib,则先安装zlib拓展, 1.进入目录cd /usr/local/php-7.3.29/ext/zlib/2.复制为config.m4 文件cp config0.m4 config.m43.运行phpize /usr/local/php/bin/phpize 4.运行 ./configure --with-php-config=/...

windows10的子系统linux(wsl)

[] windows10的子系统linux(wsl) 概述 安装wsl 开启、关闭wsl 解决wsl内存超标问题 安装node的方法 备份、还原wsl 1 安装方法 适用于 Linux 的 Windows 子系统安装指南 (Windows 10) (micro) 注意一点:步骤 5中 官网给的 wsl --set-default-version 2...

[转载]Linux C编程-实现文件夹的递归拷贝

copy(读取的路径或名字,目标文件的路径或名字) {        if(读取的是一个文件夹)        {     创造一个文件夹              打开文件夹,读取文件夹的内容              判断是否是一个文件夹  是:递归copy(xx,xx);               否,说明是个文件,拷贝文件            ...