配置内核参数,包括TCP/IP协议栈、透明大页等相关参数,提升性能。
1 2 3 4 5 6 7 8 9 10 11 12 | sysctl -w net.core.netdev_budget=600 sysctl -w net.core.rmem_max=16777216 sysctl -w net.core.somaxconn=2048 sysctl -w net.core.optmem_max=40960 sysctl -w net.core.rmem_default=65535 sysctl -w net.core.wmem_default=65535 sysctl -w net.core.wmem_max=8388608 sysctl -w net.ipv4.tcp_rmem="16384 349520 16777216" sysctl -w net.ipv4.tcp_wmem="16384 349520 16777216" sysctl -w net.ipv4.tcp_mem="8388608 8388608 8388608" sysctl -w vm.overcommit_memory=1 echo never > /sys/kernel/mm/transparent_hugepage/enabled |
参数 |
说明 |
取值 |
---|---|---|
net.core.netdev_budget |
控制每次NAPI轮询循环从单个网卡队列中处理的数据包数量,确保不超过最大限制。 |
在高速网络(尤其是10GbE+)或突发流量巨大的场景下,建议取值600。 |
net.core.rmem_max |
设置单个Socket接收缓冲区的最大字节数。 |
对于高带宽、高延迟(如广域网)或高吞吐量的连接,建议取值16777216/16MB。 |
net.core.somaxconn |
设置系统中每个监听端口(Listen Socket)的未完成连接队列(SYN Queue)和已建立连接队列(Accept Queue)的最大长度总和的上限。应用层调用listen()时设置的backlog参数不能超过此值。 |
对于高并发连接请求的服务,建议取值2048。 |
net.core.optmem_max |
设置单个Socket可分配用于辅助数据(Ancillary Data)和控制信息(如sendmsg/recvmsg使用的控制消息)的最大内存字节数。 |
对于使用大量socket选项或复杂控制消息的应用,建议取值40960/40KB。 |
net.core.rmem_default |
设置新创建Socket的接收缓冲区的默认初始大小(字节)。 |
对于高带宽、高延迟(如广域网)或高吞吐量的连接,建议取值65535/64KB。 |
net.core.wmem_default |
设置新创建Socket的发送缓冲区的默认初始大小(字节)。 |
同rmem_default,建议取值65535/64KB。 |
net.core.wmem_max |
设置单个Socket发送缓冲区的最大字节数。 |
对于需要持续高速发送大量数据的应用,建议取值8388608/8MB。 |
net.ipv4.tcp_rmem |
为TCP Sockett的接收缓冲区设置三个值:min default max。 |
对于高带宽高延迟网络(BDP大)的应用,建议取值"16384 349520 16777216"。 |
net.ipv4.tcp_wmem |
为TCP Socket的发送缓冲区设置三个值:min default max(含义同 tcp_rmem)。 |
允许内核缓存更多应用层写入的待发送数据,建议取值"16384 349520 16777216"。 |
net.ipv4.tcp_mem |
控制TCP协议栈全局可使用的总内存页数(通常1页=4KB)。设置三个值:low pressure high。 |
避免TCP在缓冲区增长到很大时(特别是在高并发或BDP大的连接上)被过早地限制,建议取值"8388608 8388608 8388608"。 |
vm.overcommit_memory |
控制内核的内存过量提交策略。 |
在高性能服务器场景下,特别是使用大量内存的应用,防止内存分配失败,建议取值1。 |
transparent_hugepage |
通过自动将多个常规内存页合并成大页,减少CPU的页表项数量,从而降低TLB缓存未命中率,提升内存访问效率。 |
在数据库和低延迟场景中,为了消除由透明大页引发的性能抖动问题,取值never。 |