一、网络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
:最大接收缓冲区大小(可调节上限)。
- 控制 TCP 接收缓冲区大小,格式为
net.ipv4.tcp_wmem
- 控制 TCP 发送缓冲区大小,格式同上,影响数据发送性能。
net.core.rmem_max
- 限制单个 socket 接收缓冲区的最大值(所有协议)。
- 用于限制
tcp_rmem
的max
值。
net.core.wmem_max
- 限制单个 socket 发送缓冲区的最大值(所有协议)。
- 用于限制
tcp_wmem
的max
值。
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 连接的内存占用会增大,尤其是在并发连接数较多时,内存压力会显著增加,酌情调整即可。