zoukankan      html  css  js  c++  java
  • linux下改动内核參数进行Tcp性能调优 -- 高并发

    前言:
    Tcp/ip协议对网络编程的重要性,进行过网络开发的人员都知道,我们所编写的网络程序除了硬件,结构等限制,通过改动Tcp/ip内核參数也能得到非常大的性能提升,
    以下就列举一些Tcp/ip内核參数,解释它们的含义并通过改动来它们来优化我们的网络程序,主要是针对高并发情况。
    这里网络程序主要指的是server端


    1. fs.file-max

    最大能够打开的文件描写叙述符数量。注意是整个系统。
    在server中。我们知道每创建一个连接,系统就会打开一个文件描写叙述符,所以,文件描写叙述符打开的最大数量也决定了我们的最大连接数
    select在高并发情况下被代替的原因也是文件描写叙述符打开的最大值,尽管它能够改动但一般不建议这么做,详情可见unp select部分。


    2.net.ipv4.tcp_max_syn_backlog

    Tcp syn队列的最大长度,在进行系统调用connect时会发生Tcp的三次握手,server内核会为Tcp维护两个队列。Syn队列和Accept队列,Syn队列是指存放完毕第一次握手的连接。Accept队列是存放完毕整个Tcp三次握手的连接,改动net.ipv4.tcp_max_syn_backlog使之增大能够接受很多其它的网络连接。
    注意此參数过大可能遭遇到Syn flood攻击,即对方发送多个Syn报文端填充满Syn队列,使server无法继续接受其它连接
    可參考此文http://tech.uc.cn/?p=1790


    3.net.ipv4.tcp_syncookies

    改动此參数能够有效的防范上面所说的syn flood攻击
    原理:在Tcpserver收到Tcp Syn包并返回Tcp Syn+ack包时,不专门分配一个数据区。而是依据这个Syn包计算出一个cookie值。

    在收到Tcp ack包时,Tcpserver在依据那个cookie值检查这个Tcp ack包的合法性。假设合法,再分配专门的数据区进行处理未来的TCP连接。
    默觉得0。1表示开启


    4.net.ipv4.tcp_keepalive_time

    Tcp keepalive心跳包机制。用于检測连接是否已断开。我们能够改动默认时间来间断心跳包发送的频率。
    keepalive通常是server对client进行发送查看client是否在线。由于server为client分配一定的资源。可是Tcp 的keepalive机制非常有争议。由于它们可耗费一定的带宽。
    Tcp keepalive详情见Tcp/ip具体解释卷1 第23章


    5.net.ipv4.tcp_tw_reuse

    我的上一篇文章中写到了time_wait状态,大量处于time_wait状态是非常浪费资源的,它们占用server的描写叙述符等。


    改动此參数。同意重用处于time_wait的socket。


    默觉得0,1表示开启


    6.net.ipv4.tcp_tw_recycle

    也是针对time_wait状态的,该參数表示高速回收处于time_wait的socket。
    默觉得0,1表示开启


    7.net.ipv4.tcp_fin_timeout

    改动time_wait状的存在时间。默认的2MSL
    注意:time_wait存在且生存时间为2MSL是有原因的。见我上一篇博客为什么会有time_wait状态的存在。所以改动它有一定的风险,还是依据具体的情况来分析。


    8.net.ipv4.tcp_max_tw_buckets

    所同意存在time_wait状态的最大数值,超过则立马被清楚而且警告。


    9.net.ipv4.ip_local_port_range

    表示对外连接的端口范围。


    10.somaxconn

    前面说了Syn队列的最大长度限制,somaxconn參数决定Accept队列长度,在listen函数调用时backlog參数即决定Accept队列的长度,该參数太小也会限制最大并发连接数,由于同一时间完毕3次握手的连接数量太小,server处理连接速度也就越慢。server端调用accept函数实际上就是从已连接Accept队列中取走完毕三次握手的连接。


    Accept队列和Syn队列是listen函数完毕创建维护的。


    /proc/sys/net/core/somaxconn改动


    上面每个參数事实上都够写一篇文章来分析了,这里我仅仅是概述下部分參数,注意在改动Tcp參数时我们一定要依据自己的实际需求以及測试结果来决定。


    參考博客:
    http://cenwj.com/2015/2/25/19

  • 相关阅读:
    堆栈学习
    需要阅读的书籍
    Rust Book Lang Ch.19 Fully Qualified Syntax, Supertraits, Newtype Pattern, type aliases, never type, dynamic sized type
    Rust Lang Book Ch.19 Placeholder type, Default generic type parameter, operator overloading
    Rust Lang Book Ch.19 Unsafe
    Rust Lang Book Ch.18 Patterns and Matching
    Rust Lang Book Ch.17 OOP
    Rust Lang Book Ch.16 Concurrency
    Rust Lang Book Ch.15 Smart Pointers
    HDU3966-Aragorn's Story-树链剖分-点权
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5061800.html
Copyright © 2011-2022 走看看