网络密集型应用的Linux网络缓冲区参数优化

发布于:2025-02-10 ⋅ 阅读:(28) ⋅ 点赞:(0)

一、网络IO密集型

1.哪些应用属于网络IO密集型应用

文件上传、下载服务器,实时大数据同步复制,Kafka巨量数据QPS生产消费环境,CDN等环境都是网络IO密集型的服务应用

2.知识来源

在《kafka权威指南2》书中环境搭建的网络小节写到了几个参数:

net.ipv4.tcp_rmem
net.ipv4.tcp_wmem
net.core.rmem_max
net.core.wmem_max
net.ipv4.tcp_window_scaling
  • net.ipv4.tcp_rmem

    • 控制 TCP 接收缓冲区大小,格式为 min default max
      • min:最小接收缓冲区大小(内核保证分配)。
      • default:默认接收缓冲区大小(动态调整)。
      • max:最大接收缓冲区大小(可调节上限)。
  • net.ipv4.tcp_wmem

    • 控制 TCP 发送缓冲区大小,格式同上,影响数据发送性能。
  • net.core.rmem_max

    • 限制单个 socket 接收缓冲区的最大值(所有协议)。
    • 用于限制 tcp_rmemmax 值。
  • net.core.wmem_max

    • 限制单个 socket 发送缓冲区的最大值(所有协议)。
    • 用于限制 tcp_wmemmax 值。

net.ipv4.tcp_window_scaling用于启用或禁用 TCP 窗口缩放(TCP Window Scaling)

功能

  • TCP 窗口缩放 使得 TCP 连接能够使用大于默认 64KB 的接收窗口,支持更高带宽和大延迟网络。
  • 默认情况下,TCP 窗口大小限制为 64KB,启用窗口缩放后,可以通过扩展 TCP 窗口来处理更大的数据量。

3.查看当前参数

 执行下面五合一命令即可全部打印出来

sysctl net.ipv4.tcp_rmem;sysctl net.ipv4.tcp_wmem;sysctl net.core.rmem_max;sysctl net.core.wmem_max;sysctl net.ipv4.tcp_window_scaling

二、调整参数

1.CentOS参数的默认值

由于我的是云服务器,可能不同厂商在这个参数上的默认值不太一样,图1为云服务器,图2为本地默认安装的CentOS7,可以发现在tcp_rmem的default参数上略有不同,大体都是相同的

 图二单位换算后:

2.默认值的下载消耗时间测试

测试文件:一个OOMdump快照文件,大小369.5MB

下载时间为1分24秒

 

 3.调整参数

因为从Linux从磁盘读取文件写入到网卡是个写操作,所以提高写的缓冲区大小是否能提高性能?

调整到32MB下载速度变为1分16秒

但是这个性能提升并不能说明是参数配置导致的,,有可能是网络波动导致的,这些参数调大适合高延迟的、低连接、大对象的传输上载和下载。

缓冲区调大,会导致每个 TCP 连接的内存占用会增大,尤其是在并发连接数较多时,内存压力会显著增加,酌情调整即可。