• 修改系统参数


    vim /etc/sysctl.conf
    然后执行/sbin/sysctl -p让参数生效

        # 表示开启 SYN cookies。当出现 SYN 等待队列溢出时,启用 cookies 来处理,可防范少量 SYN 攻击,默认为 0,表示关闭;
        net.ipv4.tcp_syncookies = 1
    
        # 表示开启重用。允许将 TIME-WAIT sockets 重新用于新的 TCP 连接,默认为 0,表示关闭;
        net.ipv4.tcp_tw_reuse = 1
    
        # 表示开启 TCP 连接中 TIME-WAIT sockets 的快速回收,默认为 0,表示关闭;
        net.ipv4.tcp_tw_recycle = 1
    
        # 修改系統默认的 TIMEOUT 时间
        net.ipv4.tcp_fin_timeout = 1
    

    tcp_tw_reuse和tcp_tw_recycle的区别

    官方文档的解释:

    tcp_tw_recycle - BOOLEAN
    Enable fast recycling TIME-WAIT sockets. Default value is 0.
    It should not be changed without advice/request of technical
    experts.
    tcp_tw_reuse - BOOLEAN
    Allow to reuse TIME-WAIT sockets for new connections when it is
    safe from protocol viewpoint. Default value is 0.
    It should not be changed without advice/request of technical
    experts.
    说实话,没看出什么区别。

    net.ipv4.tcp_tw_recycle = {0|1} 是否启用timewait快速回收;注意:开启此功能在NAT环境下可能会出现严重的问题:因为TCP有一种行为,它可以缓存每个连接最新的时间戳,后续请求中如果时间戳小于缓存中的时间戳,即被视为无效并丢弃相应的请求报文;Linux是否启用这种行为取决于tcp_timestamp和tcp_tw_recycle,而前一个参数默认是启用的,所以启用后面的参数就会激活此功能; 因此,如果是NAT环境,安全起见,应该禁用tcp_tw_recycle。另一种解决方案:把tcp_timestamps设置为0,tcp_tw_recycle设置为1并不会如想象中奏效,因为一旦关闭了tcp_timestamps,那么即便打开了tcp_tw_recycle,后面的参数也没有效果。此时降低net.ipv4.tcp_max_tw_buckets的值就可以显著降低tw连接的数量了。

    net.ipv4.tcp_tw_reuse = {0|1} 是否开启tw重用,即是否允许将TIME-WAIT sockets 用于新的TCP连接。

    所以,线上服务开启tcp_tw_reuse,对外服务尽量不要开启tcp_tw_recycle。

    tcp_fin_timeout

    发现线上nginx总是报错 connection 不够用,ss -t -a查看了一下,大部分连接卡在了 FIN_WAIT_2 状态,应该是服务器端主动关闭连接后,客户端没有调用close导致的。暂时采取措施是将 tcp_fin_timeout 的值由之前的30s改为1s,尽快结束 FIN_WAIT_2 状态的连接。

  • 相关阅读:
    ExtAspNet应用技巧(二)
    JavaScript继承详解(六)
    ExtAspNet新版本发布,集成Extjs3.0,兼容IE浏览器
    ExtAspNet发展规划
    把Doc文档转换成rtf格式 (转载)
    提高Sql Server性能的10个技巧
    winform中树和数据库关联操作的例子(C#)
    为什么C#没有提供“缺省参数”
    让UML消失一段时间
    把RichTextBox中的文本保存到Sql Server中
  • 原文地址:https://www.cnblogs.com/xianzhedeyu/p/6907522.html
Copyright © 2020-2023  润新知