0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

手把手教你如何调优Linux网络参数

马哥Linux运维 来源:CSDN技术社区 2025-05-29 09:21 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

引言

在高并发网络服务场景中,Linux内核的默认网络参数往往无法满足需求,导致性能瓶颈、连接超时甚至服务崩溃。本文基于真实案例分析,从参数解读、问题诊断到优化实践,手把手教你如何调优Linux网络参数,支撑百万级并发连接。

一、问题背景:当并发连接遇上性能瓶颈

1.1 案例环境

• 服务器配置:

vCPU: 8核 | 内存: 16GB | 网络带宽: 4Gbps | PPS: 80万

• 观测到的异常现象:

TIME_WAIT连接堆积(2464个)

• 存在CLOSE_WAIT连接(4个)

• 偶发新连接建立超时

1.2 初始参数分析

通过sysctl查看到的原始配置:

net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 131072
net.ipv4.ip_local_port_range = 1024 61999

关键缺陷:半连接队列小、端口范围窄、缓冲区限制严。

二、深度诊断:连接状态与内核参数

2.1 连接状态监控技巧

实时统计TCP状态

watch -n 1'netstat -ant | awk '''/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}''''

输出示例:

ESTABLISHED 790
TIME_WAIT 2464
SYN_RECV 32 # 半连接重点关注!

半连接专项检查

# 查看SYN_RECV连接详情
ss -ntp state syn-recv
# 监控队列溢出
netstat -s | grep -i'listen drops'

2.2 关键参数解读

参数 作用 默认值问题
tcp_max_syn_backlog 半连接队列长度 8192(突发流量易满)
somaxconn 全连接队列长度 需与应用backlog参数匹配
tcp_tw_reuse 快速复用TIME_WAIT端口 默认关闭(导致端口耗尽)
tcp_rmem /tcp_wmem 读写缓冲区大小 最大值仅6MB(影响吞吐)

三、调优方案:从参数到实践

3.1 连接管理优化

解决TIME_WAIT堆积

echo"net.ipv4.tcp_tw_reuse = 1">> /etc/sysctl.conf
echo"net.ipv4.tcp_max_tw_buckets = 262144">> /etc/sysctl.conf
echo"net.ipv4.ip_local_port_range = 1024 65000">> /etc/sysctl.conf

缩短连接回收时间

echo"net.ipv4.tcp_fin_timeout = 30">> /etc/sysctl.conf

3.2 队列与缓冲区优化

扩大连接队列

echo"net.ipv4.tcp_max_syn_backlog = 65535">> /etc/sysctl.conf
echo"net.core.somaxconn = 65535">> /etc/sysctl.conf
echo"net.core.netdev_max_backlog = 10000">> /etc/sysctl.conf

调整内存缓冲区

cat>> /etc/sysctl.conf <

3.3 Keepalive与超时优化

echo"net.ipv4.tcp_keepalive_time = 600">> /etc/sysctl.conf
echo"net.ipv4.tcp_keepalive_intvl = 30">> /etc/sysctl.conf

四、验证与监控

4.1 实时监控脚本

连接状态看板

#!/bin/bash
whiletrue;do
 clear
date
echo"---- TCP状态 ----"
 netstat -ant | awk'/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
echo"---- 半连接队列 ----"
 ss -ltn | awk'NR>1 {print "Listen队列: Recv-Q="$2", Send-Q="$3}'
echo"---- 端口使用率 ----"
echo"已用端口:$(netstat -ant | grep -v LISTEN | awk '{print $4}' | cut -d: -f2 | sort -u | wc -l)/$((65000-1024))"
sleep5
done

内核告警规则(Prometheus示例)

alert:TCP_SYN_Dropped
expr:increase(node_netstat_Tcp_Ext_SyncookiesFailed{job="node"}[1m])>0
for:5m
labels:
severity:critical
annotations:
summary:"SYN队列溢出 (实例{{ $labels.instance }})"

4.2 压测建议

使用wrk模拟高并发:

wrk -t16 -c10000 -d60s http://service:8080

监控重点指标:

•SYN_RECV数量波动

•netstat -s中的丢包计数

• 内存使用率(free -m)

五、避坑指南

5.1 常见误区

1. 盲目启用tcp_tw_recycle
NAT环境下会导致连接失败(已从Linux 4.12移除)

2. 缓冲区过大引发OOM
需根据内存调整tcp_mem:

# 计算安全值(单位:页,1页=4KB)
echo$(( $(free -m | awk '/Mem:/ {print$2}') *1024/4/3)) >> /proc/sys/net/ipv4/tcp_mem

5.2 参数依赖关系

•somaxconn需≥应用层的backlog
例如Nginx需同步调整:

listen80backlog=65535;

六、总结

通过本文的调优实践,我们实现了:

1. TIME_WAIT连接减少70%

2. 最大并发连接数提升至3万+

3. 网络吞吐量增长2倍

链接:https://blog.csdn.net/weixin_44976692/article/details/147836227

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 内核
    +关注

    关注

    4

    文章

    1436

    浏览量

    42519
  • Linux
    +关注

    关注

    88

    文章

    11635

    浏览量

    218107
  • 服务器
    +关注

    关注

    13

    文章

    10111

    浏览量

    90972
  • 网络
    +关注

    关注

    14

    文章

    8142

    浏览量

    93188

原文标题:Linux高并发场景下的网络参数调优实战指南

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    图文教程:手把手教你焊接贴片元件

    图文教程:手把手教你焊接贴片元件,首先来张全部焊接一个点的PCB图
    发表于 04-01 11:03 3.7w次阅读
    图文教程:<b class='flag-5'>手把手</b><b class='flag-5'>教你</b>焊接贴片元件

    手把手教你学单片机c语言》视频教程

    `《手把手教你学单片机C语言》视频教程电驴、酷、迅雷等下载地址《手把手教你学单片机c语言》视频教程,持续更新中,下载地址更新了,与学习单片
    发表于 10-26 14:14

    手把手教你使用QUARTUS

    手把手教你使用QUARTUS
    发表于 12-29 20:35

    手把手教你构建一个完整的工程

    手把手教你构建一个完整的工程
    发表于 08-03 09:54 33次下载
    <b class='flag-5'>手把手</b><b class='flag-5'>教你</b>构建一个完整的工程

    手把手教你写批处理-批处理的介绍

    手把手教你写批处理-批处理的介绍
    发表于 10-25 15:02 69次下载

    美女手把手教你如何装机(中)

    美女手把手教你如何装机(中) 再来是硬碟的部份,这款机壳还不错,可以旋转支架~
    发表于 01-27 11:14 1611次阅读

    美女手把手教你如何装机(下)

    美女手把手教你如何装机(下) 接著下来就是今天的重头戏,开核萝!~
    发表于 01-27 11:16 3127次阅读

    手把手教你学电子书制作

    手把手教你学电子书制作,可以自己DIY电子书
    发表于 09-13 11:26 0次下载

    手把手教你安装Quartus II

    本章手把手把教你如何安装 Quartus II 软件 ,并将它激活 。此外 还有USB -Blaster下载器的驱动安装步骤 。
    发表于 09-18 14:55 9次下载

    手把手教你在家搭建监控系统

    手把手教你在家搭建监控系统
    发表于 01-17 19:47 29次下载

    手把手教你做电子时钟---前言

    手把手教你做彩铃电子时钟
    发表于 11-14 16:53 11次下载

    手把手教你如何开始DSP编程

    手把手教你如何开始DSP编程。
    发表于 04-09 11:54 13次下载
    <b class='flag-5'>手把手</b><b class='flag-5'>教你</b>如何开始DSP编程

    手把手教你学LabVIEW视觉设计

    手把手教你学LabVIEW视觉设计手把手教你学LabVIEW视觉设计手把手教你学LabVIEW视
    发表于 03-06 01:41 3463次阅读

    手把手教你开关电源PCB排板

    手把手教你开关电源PCB排板(新型电源技术)-分享一下开关电源PCB排板的基本要点及分析,以及例子讲解。绝对的手把手
    发表于 09-18 12:27 67次下载
    <b class='flag-5'>手把手</b><b class='flag-5'>教你</b>开关电源PCB排板

    手把手教你学FPGA仿真

    电子发烧友网站提供《手把手教你学FPGA仿真.pdf》资料免费下载
    发表于 10-19 09:17 2次下载
    <b class='flag-5'>手把手</b><b class='flag-5'>教你</b>学FPGA仿真