0

0

TCP: out of memory 频繁出现时的 tcp_mem 比例 1:2:4 vs 1:4:8 测试经验

舞夢輝影

舞夢輝影

发布时间:2026-02-11 20:09:11

|

188人浏览过

|

来源于php中文网

原创

tcp_mem三值分别控制TCP内存压力启动阈值(low)、主动回收警戒线(pressure)和硬限制(max),OOM主因常是pressure设置不当而非max过小;1:4:8比例适合高吞吐长连接,但小内存或低流量场景易致回收延迟与丢包雪崩;需同步调整tcp_rmem/tcp_wmem default值防空闲连接占满内存。

tcp: out of memory 频繁出现时的 tcp_mem 比例 1:2:4 vs 1:4:8 测试经验

tcp_mem 的三个值到底怎么影响 OOM?

Linux 内核用 tcp_mem 三元组控制 TCP 内存总量上限和回收行为,不是简单“总内存除以 3”。第一个值是 per-socket 内存压力启动阈值(low),第二个是内核开始主动回收的警戒线(pressure),第三个是硬限制(max)。当频繁出现 TCP: out of memory,往往不是 max 太小,而是 pressure 设置不合理——内核还没来得及回收,就撞上 max 被丢包或阻塞。

常见错误现象:netstat -s | grep "memory" 显示大量 TCPOptimumOutOfMemory 计数;ss -m 观察到大量 socket 的 rmem_alloc 接近 rcvbuf 却不释放;dmesg 出现 TCP: out of memory — consider tuning tcp_mem

  • 1:2:4 比例下,pressure 值偏低,内核过早启用 aggressive 回收(如丢包、缩减 cwnd),但实际内存未真正紧张,反而损害吞吐
  • 1:4:8 比例拉宽了 low→pressure 的缓冲带,让内核更晚介入,适合高吞吐、长连接场景,但若 max 不足,仍会在 pressure 到 max 之间集中爆发 OOM
  • 真正关键的是 pressure 和 max 的绝对差值:差值 131072 524288 1048576)

怎么验证当前 tcp_mem 是否成为瓶颈?

别只看 /proc/sys/net/ipv4/tcp_mem 数值,要结合实时内存分配状态。重点看 /proc/net/sockstatTCP: 行的 mem 字段(单位页),它反映所有 TCP socket 当前真实内存占用,和 tcp_mem[2] 对比才有意义。

使用场景:在压测中每 5 秒采样一次:awk '/TCP:/ {print $3}' /proc/net/sockstat,同时记录 tcp_mem[2]。如果 mem 长期 > 0.9 × tcp_mem[2],且伴随 TCP: out of memory 日志,说明 max 确实卡脖子。

  • 注意 sockstatmem 是页数,需 × 4KB 才是字节数,别和 tcp_mem 的数值直接比大小
  • tcp_mem 单位是 page(默认 4KB),但它的值是“全局 TCP 内存页总数”,不是 per-socket
  • 如果 mem 峰值常达 tcp_mem[2] 的 95% 以上,而 tcp_mem[1](pressure)仅为其 40%,说明 pressure 太低,回收太激进

1:4:8 比例在什么负载下反而更糟?

不是比例越高越好。1:4:8 在小内存机器(≤ 4GB RAM)或大量低流量长连接(如 IoT 心跳)场景下,容易让 pressure 值虚高,导致内核长期不触发内存回收,最终在接近 max 时突然批量丢包、重传雪崩。

风声雨声
风声雨声

基于 gpt-3.5 的翻译服务、内容学习服务

下载

参数差异:假设物理内存 2GB,按 1:4:8 算出 tcp_mem = "32768 131072 262144"(≈128MB、512MB、1GB),但实际 TCP 内存可能只占 200MB,却因 pressure=512MB 一直不回收,bufferbloat 加剧,RTT 波动大。

  • 小内存机器建议用 1:2:4,但把 max 设为物理内存的 10%~15%(如 2GB 机设 tcp_mem[2] = 262144 ≈ 1GB)
  • 高并发短连接(如 HTTP API)慎用 1:4:8,优先调低 net.ipv4.tcp_rmem/tcp_wmem 的 default 值,减少单 socket 开销
  • 检查 /proc/sys/net/ipv4/tcp_low_latency:设为 1 可让内核更倾向快速回收,部分抵消 high pressure 的迟钝

改完 tcp_mem 后必须同步调的两个参数

单独调 tcp_mem 很少治本。它只是总闸门,下面还有 per-socket 的水龙头——tcp_rmemtcp_wmem。如果它们的 default 值过大(比如默认 256KB),而 tcp_mem 又设得很宽松,大量空闲连接会默默占满内存,直到突发流量才暴露问题。

性能影响:未同步调整时,即使 tcp_mem 改成 1:4:8,ss -i 仍可能显示大量 socket 的 rcv_ssthresh 卡在 64KB,这是内核因内存压力被迫压低接收窗口的表现,本质还是底层 buffer 分配失控。

  • 务必检查 /proc/sys/net/ipv4/tcp_rmem:三个值分别对应 min/default/max,default 建议 ≤ tcp_mem[0] ÷ 1000(例如 tcp_mem[0]=131072 页 ≈ 512MB,则 default ≤ 512KB)
  • tcp_wmem 的 default 值同样需约束,尤其在高丢包链路,过大的 default 会加剧重传缓冲堆积
  • 改完后运行 echo 1 > /proc/sys/net/ipv4/tcp_retries2(临时降低重试次数),避免旧连接在新内存策略下拖慢整体恢复
改完别只盯着 dmesg 有没有新报错,重点看 sockstatmem 曲线是否平滑、ss -smemory 行是否不再频繁触顶——真正的稳定,是压力来了有缓冲,压力走了能及时腾空。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

191

2023.09.27

python print用法与作用
python print用法与作用

本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

11

2026.02.03

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

409

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

586

2023.08.10

default gateway怎么配置
default gateway怎么配置

配置default gateway的步骤:1、了解网络环境;2、获取路由器IP地址;3、登录路由器管理界面;4、找到并配置WAN口设置;5、配置默认网关;6、保存设置并退出;7、检查网络连接是否正常。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

226

2023.12.07

http500解决方法
http500解决方法

http500解决方法有检查服务器日志、检查代码错误、检查服务器配置、检查文件和目录权限、检查资源不足、更新软件版本、重启服务器或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

453

2023.11.09

http请求415错误怎么解决
http请求415错误怎么解决

解决方法:1、检查请求头中的Content-Type;2、检查请求体中的数据格式;3、使用适当的编码格式;4、使用适当的请求方法;5、检查服务器端的支持情况。更多http请求415错误怎么解决的相关内容,可以阅读下面的文章。

434

2023.11.14

HTTP 503错误解决方法
HTTP 503错误解决方法

HTTP 503错误表示服务器暂时无法处理请求。想了解更多http错误代码的相关内容,可以阅读本专题下面的文章。

2905

2024.03.12

2026春节习俗大全
2026春节习俗大全

本专题整合了2026春节习俗大全,阅读专题下面的文章了解更多详细内容。

68

2026.02.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号