0
点赞
收藏
分享

微信扫一扫

Liunx TCP 内核参数优化

拾光的Shelly 2022-03-11 阅读 62

TCP系统默认参数与TCP系统调优参数对比


    基于系统快速回收time_wait 调优 :

     默认参数:

     net.ipv4.tcp_fin_timeout = 60

     net.ipv4.tcp_tw_recycle = 0 

     net.ipv4.tcp_tw_reuse = 0

    net.ipv4.tcp_timestamps = 1

     net.ipv4.tcp_max_tw_buckets = 8192  

     调优参数:

     net.ipv4.tcp_fin_timeout = 30                      缩短tcp 四次挥手2MSL时间。

     net.ipv4.tcp_tw_recycle = 0                         保持为0,如果为1,不能保证客户端网络环境不在NAT中,会发生不可达数据包

     net.ipv4.tcp_tw_reuse = 1                            可以快速复用time_wait sockets

     net.ipv4.tcp_timestamps = 1                        此值不能关闭,如果关闭,tw_reuse 不生效

     net.ipv4.tcp_max_tw_buckets = 5000         time_wait 超过5000就开始回收

---------------------------------------------------------------------------------------------------------------------------------------------------------

   基于系统快速回收close_wait 调优 :

   默认参数:  

    net.ipv4.tcp_keepalive_time = 7200       如果业务都是长连接,保持默认值就行,

    net.ipv4.tcp_keepalive_intvl = 75

    net.ipv4.tcp_keepalive_probes = 9      

  调优参数:

    net.ipv4.tcp_keepalive_time = 600      缩短CLOSE_WAIT 等待时间,TCP保活机制。

    net.ipv4.tcp_keepalive_intvl = 30       探测包的发送间隔, 确认连接不可用30秒后断开连接。

    net.ipv4.tcp_keepalive_probes = 5     探测包的发送次数。

在这里插入图片描述

基于系统监听syn状态 listen调优,扩大监听队列;

默认参数

net.core.somaxconn = 128

调优参数

net.core.somaxconn = 2048  扩大syn监听队列,方便快速响应连接;定义了系统中每一个端口最大的监听队列的长度。

-------------------------------------------------------------------------------------------------------------------------------------------------------------

基于系统半连接状态sync_rcvd调优,扩大等待队列;

默认参数

net.ipv4.tcp_max_syn_backlog = 1024  

net.ipv4.tcp_syncookies = 1   

调优参数:

net.ipv4.tcp_max_syn_backlog =  8192    表示SYN队列长度,默认1024,改成8192,可以容纳更多等待连接的网络连接数。

net.ipv4.tcp_syncookies = 1                      预防syn 流量攻击,超过等待队列最大值,启动syncookies。

--------------------------------------------------------------------------------------------------------------------------------------------------------------

基于系统网卡硬件等设备接受数据包调优

默认参数

net.core.netdev_max_backlog = 1000   

调优参数

net.core.netdev_max_backlog = 262144  该参数决定了,网络设备接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目。

在这里插入图片描述

基于系统本地端口范围扩展

默认参数

net.ipv4.ip_local_port_range = 32768 60999

调优参数

net.ipv4.ip_local_port_range = 1024 65000

---------------------------------------------------------------------------------------------------------------------------------------------------------------

基于tcp 网络栈缓存调优

默认参数                单位(bit) 

每个套接字所允许的最大缓冲区的大小(以字节为单位)

net.core.optmem_max = 20480  

接收套接字缓冲区大小的默认值(以字节为单位)。         

net.core.rmem_default  =  212992

接收套接字缓冲区大小的最大值(以字节为单位)

net.core.rmem_max   =  212992

发送套接字缓冲区大小的最大值(以字节为单位)

net.core.wmem_default  = 212992

发送套接字缓冲区大小的最大值(以字节为单位)

net.core.wmem_max  = 212992

确 定TCP栈应该如何反映内存使用,每个值的单位都是内存页(通常是4KB)。第一个值是内存使用的下限;第二个值是内存压力模式开始对缓冲区使用应用压力 的上限;第三个值是内存使用的上限。在这个层次上可以将报文丢弃,从而减少对内存的使用。对于较大的BDP可以增大这些值(注意,其单位是内存页而不是字 节)。 BDP (带宽时延积)

net.ipv4.tcp_mem   =   系统会自动随着自身内存实际情况分配 (无需配置,基本够用)

为自动调优定义socket使用的内存。第一个值是为socket发送缓冲区分配的最少字节数;第二个值是默认值(该值会被wmem_default覆盖),缓冲区在系统负载不重的情况下可以增长到这个值;第三个值是发送缓冲区空间的最大字节数(该值会被wmem_max覆盖)。

net.ipv4.tcp_wmem  =   4096 87380 6291456

为自动调优定义socket使用的内存。第一个值是为socket接收缓冲区分配的最少字节数;第二个值是默认值(该值会被rmem_default覆盖),缓冲区在系统负载不重的情况下可以增长到这个值;第三个值是接收缓冲区空间的最大字节数(该值会被rmem_max覆盖)。

net.ipv4.tcp_rmem   =   4096 16384 4194304

调优参数 

net.core.optmem_max =   16777216          

net.core.rmem_default  =  8388608

net.core.rmem_max   =   16777216

net.core.wmem_default  =  8388608

net.core.wmem_max  =  16777216

net.ipv4.tcp_mem   =    系统会自动随着自身内存实际情况分配(单位是页)(1120416 1493888 2240832)( 96G内存推荐)

net.ipv4.tcp_wmem  =  4096 8388608 16777216

net.ipv4.tcp_rmem   =  4096 8388608 16777216

通过上述表述net.core.rmem_default与net.core.rmem_max 不要设置一致,避免自有中间值与最高值相同,调整tcp mem buffer 是为了解决dmesg出现TCP: too many of orphaned sockets。

另一个, 如果系统并发连接数不高于2万,默认参数配置就可以,如果高于,调整成以上调优数值就可以了.  调整以上参数的是为了增加tcp mem buffer



总内存量计算: total mem  (bytes) = 1120416(页) *   4096 bytes = 4589223936 bytes = 4377 Mib 

                                                                  1493888(页) *   4096 bytes = 6118965248  bytes = 5835 Mib

                                                                  16777216(页)*  4096 bytes = 68719476736 bytes = 8753 Mib 

------------------------------------------------------------------------------------------------------------------------------------------------------------------

基于系统 TCP 通讯质量优化

默认参数

net.ipv4.tcp_synack_retries = 5   参数决定了发送SYN+ACK确认包重试的次数(数量),默认是5

net.ipv4.tcp_syn_retries = 6        作为客户端,主动建立连接时发送syn包重试的次数,默认6次 

net.ipv4.tcp_sack = 1                   启用有选择的应答,从而减少拥塞情况的发生

net.ipv4.tcp_fack = 1                   启用转发应答,从而减少拥塞情况的发生,增加快速重传

net.ipv4.tcp_retries1 = 3             放弃回应一个TCP连接请求前进行重试的次数

net.ipv4.tcp_retries2 = 15           放弃一个已经建立的TCP连接前进行重试的次数

net.ipv4.tcp_slow_start_after_idle = 1  拥塞窗口在经过一段时间空闲后需要重新初始化

net.ipv4.icmp_echo_ignore_broadcasts = 1 避免放大攻击,防止内网icmp风暴

icmp_ignore_bogus_error_responses =1 开启icmp恶意报错保护

net.ipv4.tcp_max_orphans=8192            允许保留的僵尸套接字进程的tcp socket最大数量. 超过这个数量的socket会被reset.

一个僵尸socket最高占用64K 内存,计算公式 :最大使用内存总量=8192*64*1024 bytes = 512Mib (推荐 如果是8G内存报错默认值,如果是16G以上,推荐使用16384值)

调优参数

net.ipv4.tcp_synack_retries = 3

net.ipv4.tcp_syn_retries = 3

net.ipv4.tcp_sack = 1 

net.ipv4.tcp_fack = 1  

net.ipv4.tcp_retries1 = 3 

net.ipv4.tcp_retries2 =  7

net.ipv4.tcp_slow_start_after_idle = 1 

net.ipv4.icmp_echo_ignore_broadcasts = 1

icmp_ignore_bogus_error_responses =1

net.ipv4.tcp_max_orphans=16384 如果内存很大,调整成262144

一个僵尸socket最高占用64K 内存,计算公式 :最大使用内存总量=16384*64*1024 bytes = 1024Mib 如果是nginx服务器,推荐使用:net.ipv4.tcp_max_orphans = 262144

如此调优是为了TCP快速释放失败通道, 为了优化RTT 一个连接往返时间  RTO 重传超时时间

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

基于系统TCP 路由转发的参数调优

默认参数

net.ipv4.ip_forward=0

net.ipv4.conf.default.rp_filter = 1     在Linux文件系统映射出的内核参数配置文件中记录了Linux系统中网络接口 反向路由校验

net.ipv4.conf.default.accept_source_route = 0  禁止所有IP源路由

调优参数

net.ipv4.ip_forward=1 

net.ipv4.conf.default.rp_filter = 1    

net.ipv4.conf.default.accept_source_route = 0

根据实际情况开IP转发功能;

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
举报

相关推荐

0 条评论