配置项作用 #
network.tcp.send_buffer_size 配置项用于控制TCP 套接字的发送缓冲区大小。
此配置决定了操作系统为 TCP 连接分配的发送缓冲区大小,影响网络数据的发送性能和内存使用。
配置项属性 #
- 配置路径:
network.tcp.send_buffer_size - 数据类型:
ByteSizeValue(字节大小值) - 默认值:
-1(不设置,使用系统默认) - 最小值:
-1(使用系统默认) - 最大值: 受操作系统限制(通常 1-2MB)
- 是否可选: 是
- 作用域: NodeScope(节点级别)
- 动态更新: 否(需要重启节点生效)
配置项详解 #
工作机制 #
TCP 发送缓冲区
应用程序 → 发送缓冲区 → 网络发送
小缓冲区 (32KB):
应用程序:
├── 写入数据
├── 缓冲区满 → 等待
└── 发送延迟 ↑
发送:
├── 空间小
├── 频繁填充
└── 可能更慢 ❌
大缓冲区 (256KB):
应用程序:
├── 写入数据
├── 缓冲区大 → 很少满
└── 发送延迟 ↓
发送:
├── 空间大
├── 批量发送
└── 更高效 ✅
缓冲区作用 #
发送缓冲区的作用
1. 批量发送
应用写入:
├── 小数据块快速写入
├── 缓冲区积累
└── 批量发送
2. 流量控制
发送窗口:
├── 基于接收方处理能力
├── 调整发送速率
└── 避免淹没接收方
3. 性能优化
大小权衡:
├── 大缓冲: 减少系统调用
└── 小缓冲: 更多系统调用
默认值行为 #
值为 -1 时的行为
send_buffer_size = -1:
│
↓
使用系统默认值
│
├── Linux: 通常 auto-tuned
├── 调整范围: 16KB - 4MB
├── Windows: 取决于版本
└── macOS: 通常 256KB
系统自动调整:
├── 根据连接类型
├── 根据网络条件
├── 动态优化
└── 通常表现良好 ✅
配置建议 #
生产环境(默认) #
network:
tcp:
send_buffer_size: -1 # 默认值
建议: 保持默认值 -1。使用系统默认值。
高吞吐场景 #
network:
tcp:
send_buffer_size: 256kb # 增加缓冲
建议: 设置为 128kb-512kb。高吞吐量数据发送。
内存受限环境 #
network:
tcp:
send_buffer_size: 32kb # 减少缓冲
建议: 设置为 16kb-64kb。内存受限时使用。
最大性能配置 #
network:
tcp:
send_buffer_size: 2mb # 最大缓冲
建议: 设置为 1mb-2mb。需要最大发送性能时使用。
代码示例 #
easysearch.yml 基础配置 #
network:
tcp:
send_buffer_size: -1
高性能配置 #
network:
tcp:
send_buffer_size: 256kb
receive_buffer_size: 256kb
内存受限配置 #
network:
tcp:
send_buffer_size: 32kb
receive_buffer_size: 32kb
完整 TCP 配置 #
network:
tcp:
send_buffer_size: -1
receive_buffer_size: -1
no_delay: true
keep_alive: true
相关配置 #
| 配置项 | 作用 | 默认值 |
|---|---|---|
network.tcp.send_buffer_size | 发送缓冲区大小 | -1 |
network.tcp.receive_buffer_size | 接收缓冲区大小 | -1 |
network.tcp.no_delay | 禁用 Nagle 算法 | true |
性能影响分析 #
| send_buffer_size 设置 | 优点 | 缺点 |
|---|---|---|
| 16-32KB | 内存占用小 | 可能更多系统调用 |
| 64-128KB | 平衡内存和性能 | 标准设置 |
| 256KB | 更高发送效率 | 占用更多内存 |
| 512KB+ | 最大发送效率 | 内存占用大 |
发送效率对比 #
不同缓冲区的发送效率
假设需要发送 1MB 数据,小包传输
32KB 缓冲:
├── 分成 32 次发送
├── 系统调用频繁
├── 效率: 较低
└── CPU 占用: 高 ❌
128KB 缓冲:
├── 分成 8 次发送
├── 系统调用适中
├── 效率: 较高
└── CPU 占用: 中等 ✅
256KB 缓冲:
├── 分成 4 次发送
├── 系统调用少
├── 效率: 高
└── CPU 占用: 低 ✅
512KB 缓冲:
├── 分成 2 次发送
├── 系统调用最少
├── 效率: 很高
└── CPU 占用: 很低 ✅
使用场景 #
推荐使用默认值的场景 #
- 标准应用: 正常的网络应用
- 系统调优: 系统已自动优化
- 不确定需求: 不确定具体需求时
推荐增加缓冲区的场景 #
- 大数据发送: 需要发送大量数据
- 批量操作: 批量索引、查询
- 高吞吐需求: 对发送吞吐量要求高
- 充足内存: 节点内存充足
推荐减少缓冲区的场景 #
- 内存受限: 节点内存紧张
- 大量连接: 连接数量很多
- 小数据发送: 主要是小数据包
- 低延迟要求: 希望低延迟而非高吞吐
与接收缓冲区的配合 #
发送和接收缓冲区的配合
配置 1: 标准配置
send_buffer_size: -1
receive_buffer_size: -1
├── 系统默认
├── 自动优化
└── 推荐使用 ✅
配置 2: 对称配置
send_buffer_size: 256kb
receive_buffer_size: 256kb
├── 大小一致
├── 平衡性能
└── 适合高吞吐 ✅
配置 3: 不对称配置
send_buffer_size: 512kb
receive_buffer_size: 128kb
├── 发送更大
└── 适合数据发送场景
配置 4: 最小配置
send_buffer_size: 32kb
receive_buffer_size: 32kb
├── 最小内存占用
├── 适合内存受限
└── 牺牲一些性能 ⚠️
操作系统限制 #
OS 限制和建议
Linux:
/proc/sys/net/core/wmem_max
├── 最大发送缓冲区
├── 默认: 通常 128KB-4MB
└── 设置: echo 16777216 > /proc/sys/net/core/wmem_max
/proc/sys/net/core/wmem_default
├── 默认发送缓冲区
├── 默认: 通常 128KB
└── 设置: echo 262144 > /proc/sys/net/core/wmem_default
Windows:
注册表:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
├── TcpWindowSize
└── 根据版本自动调整
建议:
send_buffer_size ≤ OS wmem_max
│
↓
否则:
├── 可能设置失败
├── 或被限制到最大值
└── 记录警告日志 ⚠️
内存使用分析 #
缓冲区内存占用
假设 1000 个连接
32KB 缓冲:
每连接: 32KB
总内存: 1000 × 32KB = 32MB ✅
128KB 缓冲:
每连接: 128KB
总内存: 1000 × 128KB = 128MB
256KB 缓冲:
每连接: 256KB
总内存: 1000 × 256KB = 256MB
├── 内存占用大 ⚠️
└── 需要评估
512KB 缓冲:
每连接: 512KB
总内存: 1000 × 512KB = 512MB
├── 内存占用很大 ❌
└── 谨慎使用
注意事项 #
默认值: 默认值为
-1,使用系统默认值。需要重启: 修改此配置需要重启节点。
字节单位: 支持 kb、mb、gb 等单位。
OS 限制: 受操作系统最大值限制。
内存占用: 缓冲区越大,内存占用越大。
连接数量: 需要考虑连接数量。
对称配置: 通常与 receive_buffer_size 配合。
测试验证: 配置变更后应验证性能。
监控建议: 监控网络吞吐和内存使用。
合理设置: 根据实际需求合理设置。
与 no_delay 的配合 #
缓冲区与 Nagle 算法
no_delay = true:
├── 禁用 Nagle 算法
├── 立即发送小包
├── 降低延迟
└── 配合适当缓冲区 ✅
no_delay = false:
├── 启用 Nagle 算法
├── 等待更多数据
├── 合并小包
└── 提高效率
推荐配置:
no_delay: true (默认)
send_buffer_size: 256kb
├── 禁用 Nagle
├── 适当缓冲区
└── 低延迟 + 高效率 ✅
性能调优建议 #
性能调优步骤
1. 监控当前性能
├── 网络吞吐量
├── 发送速率
└── 内存使用
2. 确定瓶颈
├── 吞吐量低 → 考虑增加缓冲区
├── 内存占用高 → 考虑减小缓冲区
└── 延迟高 → 检查 no_delay
3. 测试不同配置
├── 32KB → 64KB → 128KB → 256KB
├── 测量吞吐量
├── 测量延迟
└── 测量内存
4. 选择最优值
├── 平衡性能和内存
├── 验证稳定性
└── 部署配置





