单机百万TCP连接优化实战:从12万到100万的突破
1. 项目背景与挑战去年在做一个物联网消息推送服务时我们遇到了单机TCP连接数的瓶颈。当时使用的Ubuntu 18.04服务器在连接数达到12万左右时新连接就开始大量失败。经过两周的调优最终实现了单机100万TCP连接的稳定保持。这个过程中积累的经验值得分享给面临类似挑战的同行。2. 基础环境准备2.1 硬件配置选择我们使用了戴尔R740xd服务器配置如下CPU: 2颗Intel Xeon Gold 6248R (24核48线程)内存: 384GB DDR4网卡: Mellanox ConnectX-5 25Gbps * 2存储: Intel P4510 2TB NVMe * 2关键点网卡的选择至关重要。普通千兆网卡在50万连接时就会出现严重瓶颈建议至少使用10Gbps及以上带宽的优质网卡。2.2 操作系统优化安装Ubuntu 20.04 LTS Server版并进行以下基础优化# 关闭不必要的服务 sudo systemctl disable --now avahi-daemon cups chrony # 调整内核参数 echo fs.file-max 2097152 | sudo tee -a /etc/sysctl.conf echo net.ipv4.ip_local_port_range 1024 65535 | sudo tee -a /etc/sysctl.conf echo net.ipv4.tcp_tw_reuse 1 | sudo tee -a /etc/sysctl.conf sudo sysctl -p3. TCP协议栈深度调优3.1 关键内核参数解析在/etc/sysctl.conf中添加以下参数# 最大文件描述符数 fs.file-max 2097152 # TCP内存分配 net.ipv4.tcp_mem 8388608 12582912 16777216 net.ipv4.tcp_rmem 4096 87380 16777216 net.ipv4.tcp_wmem 4096 65536 16777216 # TCP连接回收 net.ipv4.tcp_fin_timeout 30 net.ipv4.tcp_max_tw_buckets 2000000 # 连接跟踪 net.netfilter.nf_conntrack_max 1048576参数说明tcp_mem三个值分别表示最小压力、中等压力、最大压力时的内存分配增大tcp_rmem/wmem可以提升大并发下的吞吐量调整fin_timeout可以加速连接回收3.2 中断亲和性优化对于多队列网卡需要正确配置中断亲和性# 查看中断分布 cat /proc/interrupts | grep eth # 设置CPU亲和性 sudo apt install irqbalance sudo systemctl enable --now irqbalance4. 应用层优化策略4.1 连接管理架构我们采用了多线程epoll模型关键设计点主线程负责accept新连接每个工作线程管理约5万连接使用SO_REUSEPORT实现端口复用示例代码片段int sockfd socket(AF_INET, SOCK_STREAM, 0); int optval 1; setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, optval, sizeof(optval)); setsockopt(sockfd, SOL_SOCKET, SO_REUSEPORT, optval, sizeof(optval));4.2 内存管理技巧为每个连接预分配读写缓冲区使用内存池避免频繁malloc/free禁用透明大页(THP)echo never | sudo tee /sys/kernel/mm/transparent_hugepage/enabled5. 压测方法与结果5.1 测试工具选型我们使用了自己开发的压测工具主要特点支持分布式发起连接可模拟真实心跳包交互提供详细的连接状态统计也可以使用wrk2进行基础测试wrk -t12 -c1000000 -d60s --latency http://target:80805.2 性能指标监控关键监控项及工具连接数ss -s内存使用free -hCPU负载top -H网络流量iftop6. 典型问题与解决方案6.1 连接建立失败症状达到12万连接后无法建立新连接 排查检查ulimit -n查看dmesg是否有OOM日志检查nf_conntrack是否满解决方案echo 1048576 /proc/sys/net/netfilter/nf_conntrack_max6.2 吞吐量下降症状连接数增加后吞吐显著降低 可能原因网卡中断集中在单个CPU内存带宽瓶颈TCP缓冲区不足优化方法# 调整网卡多队列 ethtool -L eth0 combined 327. 进阶优化方向当连接数超过50万后还需要考虑使用DPDK绕过内核协议栈采用RSS(Receive Side Scaling)技术优化NUMA内存访问考虑使用Kernel bypass技术在实际测试中我们发现每个TCP连接在空闲状态下约占用3KB内存。因此100万连接至少需要3GB内存专门用于连接维护这还不包括应用层的内存需求。

相关新闻

Figma设计资产重构:从老文件中高效提取组件与样式指南

Figma设计资产重构:从老文件中高效提取组件与样式指南

1. 先搞清楚“掰老物”到底在做什么看到“掰figma老物”这个标题,很多人的第一反应可能是“拆解”或“分析”某个老旧的Figma设计文件。但在实际的设计资产管理和团队协作中,这个动作背后通常隐藏着几个更具体、更值得关注的问题:如何从一份历…

2026/10/10 0:11:26 阅读更多 →
Cadence 16.6 ODB++输出失败排查指南:从原理到实战解决

Cadence 16.6 ODB++输出失败排查指南:从原理到实战解决

1. 项目概述:Cadence 16.6 ODB输出失败的深度解析 最近在论坛和几个技术群里,看到不少同行都在问同一个问题:用Cadence 16.6版本出ODB文件时,要么报错,要么干脆没反应,文件死活生成不出来。这确实是个挺让人…

2026/10/11 8:57:59 阅读更多 →
从位权到补码:深入理解计算机进制转换与核心应用

从位权到补码:深入理解计算机进制转换与核心应用

1. 从“满十进一”到“满二进一”:为什么我们需要不同的进制?你可能从来没想过,我们每天用的“1、2、3”这种计数方式,其实是一种“约定俗成”。我们默认了“逢十进一”,这就是十进制。但计算机的世界里,它…

2026/10/9 12:22:51 阅读更多 →

最新新闻

Docker优缺点深度剖析:从环境一致性到生产级实践避坑指南

Docker优缺点深度剖析:从环境一致性到生产级实践避坑指南

1. 从一次线上事故说起:为什么我又把Docker翻出来重新审视前阵子帮一个朋友排查他那个小团队的项目部署问题,四个人开发,测试环境跑得好好的,一上生产就各种“在我电脑上明明是好的”。这种场景你应该不陌生,我这些年听…

2026/10/14 15:13:01 阅读更多 →
CMAK 2.0.0.2 部署与实战:Kafka 可视化运维核心指南

CMAK 2.0.0.2 部署与实战:Kafka 可视化运维核心指南

简介:本资源为Kafka-Manager(CMAK)2.0.0.2官方预编译版,面向Kafka运维工程师、中间件开发人员及分布式系统学习者,专为简化多集群监控、主题与消费者组管理、在线配置调整等高频运维场景而设计。压缩包共780个文件&…

2026/10/14 15:13:01 阅读更多 →
驾驶员疲劳检测数据集实战:从XML转YOLO到模型训练与调优

驾驶员疲劳检测数据集实战:从XML转YOLO到模型训练与调优

简介:这份资源是面向计算机视觉学习者与智能驾驶方向研究者的YOLO驾驶员疲劳检测数据集,可用于训练和验证闭眼、打哈欠等疲劳行为的实时识别模型,适合具备一定目标检测基础、希望落地疲劳预警项目的读者。压缩包共8744个文件,约25…

2026/10/14 15:13:01 阅读更多 →
POSIX共享内存实战:高实时性IPC的零拷贝设计与避坑指南

POSIX共享内存实战:高实时性IPC的零拷贝设计与避坑指南

1. 共享内存到底是什么,为什么它在高性能场景里不可替代共享内存不是什么新概念,但很多人一听到就下意识觉得“这得是系统级开发才碰得到”,其实完全不是。我最早在做某图像处理Demo时,需要让两个独立进程——一个负责实时采集摄像…

2026/10/14 15:13:01 阅读更多 →
论文党收藏!2026AI写作辅助平台全攻略 含详细免费额度说明

论文党收藏!2026AI写作辅助平台全攻略 含详细免费额度说明

写期刊论文是不是总让你感觉头大?面对繁杂的文献资料、严格的格式要求,还有一遍又一遍的修改,很多学术朋友都遇到写作效率低下的问题。其实,利用AI论文写作工具可以帮你省不少力气。现在,无论是查找资料,还…

2026/10/14 15:13:01 阅读更多 →
M4A转MP3批量转换工具:FFmpeg参数调优与避坑指南

M4A转MP3批量转换工具:FFmpeg参数调优与避坑指南

简介:这是一款面向音频爱好者与日常办公用户的M4A转MP3格式转换工具,主要解决M4A文件在非Apple设备或较旧播放器上兼容性不足的问题,让音乐库能在更多终端顺畅播放。压缩包共2个文件,包含1个exe可执行程序与1个htm说明文档&#x…

2026/10/14 15:11:59 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →