zoukankan      html  css  js  c++  java
  • Linux C++ Socket 高并发短连接 TIME_WAIT 挥之不去解决方法

    近期遇到一个项目 需要在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 效果明显呐~!~!~!

  • 相关阅读:
    100个高质量Java开发者博客
    javascript的trigger事件
    js正则函数match、exec、test、search、replace、split使用集合
    Openssl verify命令
    Openssl x509命令
    Openssl req命令
    Openssl asn1parse命令
    Openssl ec命令
    Openssl ecparam命令
    Openssl rsa命令
  • 原文地址:https://www.cnblogs.com/cnsanshao/p/11287659.html
Copyright © 2011-2022 走看看