0

0

Linux网络栈性能调优_内核参数说明【教程】

舞夢輝影

舞夢輝影

发布时间:2025-12-31 18:31:02

|

907人浏览过

|

来源于php中文网

原创

net.core.somaxconn过低导致accept队列溢出,表现为ss -lnt中Recv-Q长期非零或Connection refused;需设为65535并同步调整应用backlog参数。

linux网络栈性能调优_内核参数说明【教程】

.net.core.somaxconn 设置过低导致 accept 队列溢出

ss -lnt 显示 Recv-Q 长期非零,或应用日志频繁出现 Connection refused(尤其在突发流量下),大概率是 net.core.somaxconn 不足。该参数限制内核 listen socket 的全连接队列最大长度,不是应用层 backlog 参数能绕过的。

  • 默认值通常为 128,远低于现代 Web 服务需求;建议设为 65535 或更高
  • 需同时调整应用的 listen() 第二个参数(如 Nginx 的 listen ... backlog=65535),否则仍受其限制
  • 修改后无需重启内核,但监听新端口的服务需重启才能生效(已有 listen socket 不会动态扩容)
  • 验证方式:
    sysctl net.core.somaxconn
    ss -lnt | grep :80
    观察 Recv-Q 是否持续堆积

net.ipv4.tcp_tw_reuse 与 tcp_tw_recycle 的取舍

tcp_tw_reuse 在 TIME_WAIT 状态 socket 复用上安全有效;而 tcp_tw_recycle 已在 Linux 4.12+ 彻底移除,且在 NAT 环境下必然引发连接失败——它依赖时间戳单调递增,但多客户端共用公网 IP 时,内核无法区分不同设备的时间戳偏移。

  • 只启用 net.ipv4.tcp_tw_reuse = 1,禁用 tcp_tw_recycle(设为 0 或直接不配置)
  • 搭配 net.ipv4.tcp_fin_timeout = 30 可进一步缩短 TIME_WAIT 持续时间(默认 60 秒)
  • 若仍有大量 TIME_WAIT,优先检查是否短连接滥用(如 HTTP 未复用连接),而非盲目调参

接收缓冲区自动调优失效的典型表现

net.ipv4.tcp_rmem 三元组中第二项(默认接收窗口)设得过大(如 4096 65536 16777216),反而可能让内核放弃自动缩放:因为最小值和最大值跨度过大,TCP 倾向于长期维持高缓冲,浪费内存且增加延迟。

稿定AI绘图
稿定AI绘图

稿定推出的AI绘画工具

下载
  • 推荐设置为 4096 131072 6291456(小、中、大三档合理拉开,但最大值不超 6MB)
  • 确认自动调优开启:net.ipv4.tcp_window_scaling = 1(必须为 1)
  • ss -i
    查看单连接实际 rwnd 值,若长期卡在最小值,说明应用读取太慢或缓冲区被锁死
  • 不要单独调大 rmem_max,它只影响 setsockopt(SO_RCVBUF) 上限,不改变 TCP 动态行为

net.core.netdev_max_backlog 过载引发丢包

该参数控制网卡中断后,软中断处理前,网络栈接收队列能暂存的数据包数量。当 ifconfig/proc/net/devrx_dropped 持续增长,且无硬件错误,就是此队列溢出的明确信号。

  • 默认值常为 1000,千兆以上网卡或高并发场景建议设为 5000–10000
  • 需配合调大 net.core.dev_weight(默认 64),提升软中断一次处理的包数,避免 backlog 积压
  • 注意:增大该值会增加内存占用(每个 sk_buff 约 2KB),不要无脑翻十倍
  • 验证方法:
    watch -n1 'cat /proc/net/snmp | grep -i "InErrs\|InNoRoutes"
    ,若 InNoRoutes 异常升高,也可能是 backlog 溢出后包被静默丢弃
实际调优永远从监控出发:先看 ss -snetstat -scat /proc/net/snmp 找出具体瓶颈类型,再针对性改参。内核网络栈各层耦合紧密,一个参数改错可能把问题转移到更难诊断的位置。

相关文章

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

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

相关专题

更多
nginx 重启
nginx 重启

nginx重启对于网站的运维来说是非常重要的,根据不同的需求,可以选择简单重启、平滑重启或定时重启等方式。本专题为大家提供nginx重启的相关的文章、下载、课程内容,供大家免费下载体验。

227

2023.07.27

nginx 配置详解
nginx 配置详解

Nginx的配置是指设置和调整Nginx服务器的行为和功能的过程。通过配置文件,可以定义虚拟主机、HTTP请求处理、反向代理、缓存和负载均衡等功能。Nginx的配置语法简洁而强大,允许管理员根据自己的需要进行灵活的调整。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

490

2023.08.04

nginx配置详解
nginx配置详解

NGINX与其他服务类似,因为它具有以特定格式编写的基于文本的配置文件。本专题为大家提供nginx配置相关的文章,大家可以免费学习。

496

2023.08.04

tomcat和nginx有哪些区别
tomcat和nginx有哪些区别

tomcat和nginx的区别:1、应用领域;2、性能;3、功能;4、配置;5、安全性;6、扩展性;7、部署复杂性;8、社区支持;9、成本;10、日志管理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

222

2024.02.23

nginx报404怎么解决
nginx报404怎么解决

当访问 nginx 网页服务器时遇到 404 错误,表明服务器无法找到请求资源,可以通过以下步骤解决:1. 检查文件是否存在且路径正确;2. 检查文件权限并更改为 644 或 755;3. 检查 nginx 配置,确保根目录设置正确、没有冲突配置等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

329

2024.07.09

Nginx报404错误解决方法
Nginx报404错误解决方法

解决方法:只需要加上这段配置:try_files $uri $uri/ /index.html;即可。想了解更多Nginx的相关内容,可以阅读本专题下面的文章。

3505

2024.08.07

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

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

366

2023.07.18

堆和栈区别
堆和栈区别

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

561

2023.08.10

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

3

2025.12.31

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 6.3万人学习

Git 教程
Git 教程

共21课时 | 2.3万人学习

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

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