Linux内核参数调优

这篇文章主要介绍一些内核参数的含义,以及我们如何根据具体的尝尽对他们进行调优。

前言

每个系列,不同版本的内核可调节的参数可能略有不同,主流的3.10的内核可调节的内核参数多达2500个。

其中kernel的调节参数占大头73%(~1800),接着就是网络21%(~550),vm和file各有50左右。

下面的参数总结我们针对不同的参数类型,用不同的颜色进行标注。

配置项目

颜色标注

描述

蓝色

百度内部内核暴露出的独有参数

粉色

需要重点关注的参数设置

由于可调节的内核参数过多,大部分可能我们现阶段可能用不到,所以,我们只总结当前可能用到的参数

网络

/proc/sys/net/ipv4/*的参数设置一般都在这个文档中有说明:https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt

配置项

默认值

建议值

备注

net.core.bpf_jit_enable

0

0

//基于时间规则的编译器,用于基于PCAP(packet capture library)并使用伯克利包过滤器(Berkeley Packet Filter,如tcpdump)的用户工具,可以大幅提升复杂规则的处理性能。0禁止,1开始

net.core.message_burst

1

10

//设置每十秒写入多少次请求警告;此设置可以用来防止DOS攻击

net.core.message_cost

60

5

//置每一个警告的度量值,缺省为5,当用来防止DOS攻击时设置为0

net.core.rmem_default

135168

2500000

//设置接收socket的缺省缓存大小(字节)

net.core.somaxconn

2048

65535

//定义了系统中每一个端口最大的监听队列的长度,这是个全局的参数。高并发下,全连接队列的长度

net.core.wmem_default

135168

2500000

//设置发送的socket缺省缓存大小(字节)

net.ipv4.baidu_cwnd_init_loss

3

7

// RTO触发丢包检测丢包后的初始窗口大小

net.ipv4.baidu_init_cwnd

10

24

// iw初始拥塞窗口,3.10 默认是10

net.ipv4.baidu_init_rcv_wnd

17

10

// 初始接受窗口

net.ipv4.baidu_ss_enable

0

1

// slow start的开关,干预对慢启动阶段cwnd的增长幅度计算(增幅), 0表示不开启

net.ipv4.baidu_ssthresh_max

120

110

// 慢启动阈值<tcp_max_ssthresh则是慢启动阶段

net.ipv4.baidu_ssthresh_rtt_thresh

0

10

// set ssthresh based on rtt,now_rtt>这个阈值,则倍数增加snd_ssthresh,最大不超过baidu_ssthresh_max

net.ipv4.baidu_synack_linear_retries

0

8

// synack的重传次数,超过应该直接丢弃请求

net.ipv4.baidu_synack_timeout_moderate_cwnd

0

1

// include/net/tcp.h,优化握手阶段的拥塞窗口,重传次数超过sysctl_baidu_synack_linear_retries则设置窗口为 baidu_cwnd_init_loss,如未超过则进入拥塞避免,窗口设置为初始窗口

net.ipv4.baidu_tcp_cwnd_enlarge

0

1

// tcp_cwnd_reduction异常时窗口减少不会太激进

net.ipv4.baidu_tcp_cwnd_sndcnt_limit

0

1

// tcp cwnd Additional increase in prr,加速快重传窗口恢复到快恢复

net.ipv4.baidu_tcp_enlarge_cwnd_after_recovery

0

2

// tcp cwnd Additional increase after recovery

net.ipv4.baidu_tcp_fast_tlp_period_scale

0

2

// TLP尾部探测

net.ipv4.baidu_tcp_fast_tlp_thresh

0

3

// send pkts threshold to trigger fast tlp

net.ipv4.baidu_tcp_fin_data_uncouple

0

1

// tcp_output.c 干预tcp_send_fin() 在发送fin时如果写队列还有包没发完,设置=0会直接发fin,设置1会发完数据

net.ipv4.baidu_tcp_init_rto

1000

150

// 超时RTO,设置的太长了 int sysctl_baidu_tcp_init_rto __read_mostly = (unsigned)HZ; 内核固化的值,除非重编内核 TCP/IP重传超时--RTO_onelight1997的博客-CSDN博客

net.ipv4.baidu_tcp_linear_retries

0

4

// rto linear retries number,out_reset_timer,用户调整thin包的超时时钟

net.ipv4.baidu_tcp_lost_reduce

0

1

// Number of additional lost packets marked,Reno计算lost包数量时额外加了一个常量,不明白

net.ipv4.baidu_tcp_probe_max_interval

0

60

设置最大超时tcp_ack_probe(),如果TCP有数据要发送,而对端通告窗口为0,则持续定时器启动,超时后向对端发送1字节的数据,以判断对端接收窗口是否已经打开

net.ipv4.baidu_tcp_probe_orphan_retries

0

9

零窗口探测 tcp_probe_timer(),干预对孤儿socket的重传次数max_probe = baidu_tcp_probe_orphan_retries

net.ipv4.baidu_tcp_probe_retries

0

23

零窗口探测 tcp_probe_timer(),干预对孤儿socket的重传次数max_probe = baidu_tcp_probe_orphan_retries

net.ipv4.baidu_tcp_retran_prefer_thresh

0

3

非零值,且lost>这个阈值,则 cwnd = cwnd - sysctl_baidu_tcp_retran_prefer_reserve,如果in_flight < cwnd,return min(halfcwnd, cwnd - in_flight)。影响MTU探测 Send at most one packet when push_one > 0. Temporarily ignore,cwnd limit to force at most one packet out when push_one == 2

net.ipv4.baidu_tcp_rto_max

120000

800

max rto 单位ms bfe的是默认值 内核写死

net.ipv4.baidu_tcp_rto_min

200

40

min rto bfe的是默认值 内核写死

net.ipv4.baidu_tcp_slow_rto_line

0

400

rtt threshold to use slow rto max

net.ipv4.baidu_tcp_slow_rto_max

0

2000

与baidu_tcp_slow_rto_line一起计算max rto

net.ipv4.conf.lo.accept_source_route

0

1

安全选项,通常关闭,减少ddos

net.ipv4.conf.lo.rp_filter

1

0

开启源地址校验,0关闭,1严格校验,2宽松校验,减少ddos

net.ipv4.ip_local_port_range

32768 60999

10000 61000

调大可用端口的使用范围

net.ipv4.ipfrag_secret_interval

0

600

定时重组ipq散列表的时间间隔,默认值为600s,影响IP分包和重组

net.ipv4.neigh.default.unres_qlen

106

30

最大挂起arp请求的数量,这些请求都正在被解析中.

net.ipv4.neigh.default.unres_qlen_bytes

229376

65536

最大处理arp包的字节数

net.ipv4.neigh.lo.unres_qlen

106

30

ARP每个没有被其它网络层解析邻居路由地址,在队列中可存放包的最大数目。缺省值3

net.ipv4.neigh.lo.unres_qlen_bytes

229376

65536

ARP 其默认值为SK_WMEM_MAX(即net.core.wmem_default),内核建议此值的设置应能够容纳256个中型长度的报文

net.ipv4.neigh.xgbe0.unres_qlen

106

30

ARP

net.ipv4.neigh.xgbe0.unres_qlen_bytes

229376

65536

ARP

net.ipv4.tcp_abort_on_overflow

1

0

tcp_abort_on_overflow 为0表示如果三次握手第三步的时候全连接队列满了那么server扔掉client 发过来的ack(在server端认为连接还没建立起来),server发送一个reset包给client,表示废掉这个握手过程和这个连接,会导致connet reset by peer 记一次惊心的网站TCP队列问题排查经历 - 知乎

net.ipv4.tcp_allowed_congestion_control

cubic reno

boostv3_2 boostv3_1 boostv3 leicesterv2 cubic reno

拥塞控制算法配置

net.ipv4.tcp_available_congestion_control

cubic reno

boostv3_2 boostv3_1 boostv3 leicesterv2 cubic reno boost boost_pk

拥塞控制算法配置

net.ipv4.tcp_base_mss

1024

512

TCP的MTU探测的基础MSS默认初始化为1024,见宏定义TCP_BASE_MSS,可通过PROC文件tcp_base_mss修改其值 TCP的MTU探测功能_tcp_mtu_probing_redwingz的博客-CSDN博客

net.ipv4.tcp_challenge_ack_limit

1000

100

默认值1000,PROC文件tcp_challenge_ack_limit控制每秒钟发送挑战ACK报文的数量。避免遭受Blind In-Window Attacks,包括reset,sync或者数据注入攻击等,详解RFC5961 TCP挑战ACK报文限速_challenge ack_redwingz的博客-CSDN博客

net.ipv4.tcp_congestion_control

cubic

boostv3_2

拥塞控制算法配置

net.ipv4.tcp_fack

0

1

对sack协议加以完善,改进tcp的拥塞控制机制,打开FACK(Forward ACK) 拥塞避免和快速重传功能。(注意,当tcp_sack设置为0的时候,这个值即使设置为1也无效)

net.ipv4.tcp_fastopen

1

0

TFO,三次握手server直接会数据,移动场景应该有收益。默认开启=1

net.ipv4.tcp_fin_timeout

60

30

默认值60s,决定了它保持在FIN-WAIT-2状态的时间,加速TIME_WAIT回收以下参数配合 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_fin_timeout = 30

net.ipv4.tcp_max_syn_backlog

2048

65536

定义了处于SYN_RECV的TCP最大连接数,当处于SYN_RECV状态的TCP连接数超过tcp_max_syn_backlog后,会丢弃后续的SYN报文。

net.ipv4.tcp_max_tw_buckets

262144

500000

表示系统同时保持TIME_WAIT套接字的最大数量,超过阈值netstat打印TCP: time wait bucket table overflow,会reset client请求。系统当前使用量 cat /proc/net/sockstat 24W

net.ipv4.tcp_mem

524288 681574 1048576

4633476 6177969 9266952

调整TCP的内存大小,其单位是页,1页等于4096字节,三个配置low, pressure, high。 内存占用超过high系统会拒绝分配socket,后台输出“TCP: too many of orphaned sockets”。1048576*4/1024K = 4096M。 每个链接大约7.5KB内存,如果百万链接大约需要7.15G内存。默认配置偏小

net.ipv4.tcp_notsent_lowat

4.295E+09

-1

tcp_notsent_lowat控制发送缓存队列中的未发送数据量,低于此值可发送,超出此值停止发送,按初始值

net.ipv4.tcp_orphan_retries

5

9

参数控制主动关闭段发送FIN,没有收到回应,重复发送FIN的次数。由于发送了FIN,处于FIN_WAIT_1状态,重负载web服务器建议调小

net.ipv4.tcp_reordering

3

3

判断丢包的dup ack数量

net.ipv4.tcp_retries1

3

5

它表示的是TCP传输失败时不检测路由表的最大的重试次数,RFC 规定最低的数值是3﹐这也是默认值﹐根据RTO的值大约在3秒 - 8分钟之间。

net.ipv4.tcp_retries2

5

23

数据重传次数超过 tcp_retries2 会直接放弃重传,关闭 TCP 流

net.ipv4.tcp_slow_start_after_idle

1

0

tcp连接在空闲xx毫秒后进入slow start阶段,默认值1,降低tcp传输性能。需禁止,设置成0 Tcp性能调优 解决Tcp长延时_解决tcp延迟_guangyinglanshan的博客-CSDN博客

net.ipv4.tcp_syn_retries

1

4

在对方不返回SYN + ACK的情况下(也就是超时的情况下),第一次发送之后,内核最多重试几次发送SYN包;并且决定了等待时间(2^n -1)

net.ipv4.tcp_synack_retries

2

30

在回应 SYN 要求时会尝试多少次重新发送初始 SYN,ACK 封包后才决定放弃,三次握手的第二步

net.ipv4.tcp_thin_linear_timeouts

0

1

重传超时后要去检查tcp stream是不是 thin ( less than 4 packets in flight),默认值0,当该参数打开的时候,前6次RTO超时触发的重传并不进行指数回退

net.ipv4.tcp_tso_win_divisor

3

200

单个TSO段可消耗拥塞窗口的比例,默认值为3,TSO(TCP Segment Offload)利用网卡的处理能力,降低CPU发送数据包的负载,需要网卡硬件及驱动的支持。发送数据不用考虑MSS,把一部分CPU处理MSS的工作转移到网卡来处理

net.ipv4.udp_mem

4495956 5994609 8991912

4634031 6178709 9268062

UDP内存

net.ipv4.xfrm4_gc_thresh

32768

1024

IPv4目的地址缓存的垃圾回收阈值,超过阈值2倍,则不再新分配 xfrm4_gc_thresh | sysctl-explorer.net

net.ipv6.conf.all.accept_dad

0

1

IPv6地址检测,Whether to accept DAD (Duplicate Address Detection). 0: Disable DAD 1: Enable DAD (default) 2: Enable DAD, and disable IPv6 operation if MAC-based duplicate link-local address has been found

net.ipv6.conf.all.accept_ra

1

0

IPv6路由

net.ipv6.conf.all.accept_redirects

1

0

net.ipv6.conf.all.router_solicitations

-1

3

net.ipv6.conf.default.accept_ra

1

0

net.ipv6.conf.default.accept_redirects

1

0

net.ipv6.conf.default.router_solicitations

-1

3

net.ipv6.conf.lo.accept_ra

1

0

net.ipv6.conf.lo.accept_redirects

1

0

net.ipv6.conf.lo.router_solicitations

-1

3

net.ipv6.conf.xgbe0.accept_ra

1

0

net.ipv6.conf.xgbe0.accept_redirects

1

0

net.ipv6.conf.xgbe0.mtu

1492

1500

net.ipv6.conf.xgbe0.router_solicitations

-1

3

net.ipv6.ip6frag_secret_interval

0

600

net.ipv6.neigh.default.unres_qlen

106

30

net.ipv6.neigh.default.unres_qlen_bytes

229376

65536

net.ipv6.neigh.lo.unres_qlen

106

30

net.ipv6.neigh.lo.unres_qlen_bytes

229376

65536

net.ipv6.neigh.xgbe0.unres_qlen

106

30

net.ipv6.neigh.xgbe0.unres_qlen_bytes

229376

65536

net.ipv6.route.max_size

4096

16384

net.ipv6.xfrm6_gc_thresh

32768

1024

参考

BFE 4系内核参数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值