当前位置: 首页 > article >正文

ubuntu高并发内核参数调优 - (压测客户端调优)

业务上要求集群提供10w+并发,10w+并发听上去不是很难,但10w并发持续1小时呢
在业务上线之前还需要我们自己对业务进行压测,俗称benchmark。
压测的服务器也是需要进行性能调优的,以下列出调优前后的参数对比,更直观的分析和感受参数对程序的影响

压测前内核参数自检

#!/bin/bash
# 脚本名称: check_benchmark_server_kernel_params.sh
# 描述: 查询压测服务武相关的Linux内核参数的当前值# 输出格式化函数
print_header() {echo -e "\n\033[1;34m$1\033[0m"echo "--------------------------------"
}# 文件描述符和端口范围
print_header "文件描述符和端口范围"
sysctl fs.file-max
sysctl fs.nr_open
sysctl net.ipv4.ip_local_port_range# TCP连接建立和释放
print_header "TCP连接建立和释放"
sysctl net.ipv4.tcp_max_syn_backlog
sysctl net.core.somaxconn
sysctl net.ipv4.tcp_fin_timeout
sysctl net.ipv4.tcp_syncookies
sysctl net.ipv4.tcp_fastopen 2>/dev/null || echo "net.ipv4.tcp_fastopen: [不支持]"
sysctl net.ipv4.tcp_synack_retries
sysctl net.ipv4.tcp_syn_retries
sysctl net.ipv4.tcp_tw_reuse# TCP连接保持和超时
print_header "TCP连接保持和超时"
sysctl net.ipv4.tcp_keepalive_time
sysctl net.ipv4.tcp_keepalive_intvl
sysctl net.ipv4.tcp_keepalive_probes
sysctl net.ipv4.tcp_max_tw_buckets# 内存和缓冲区设置
print_header "内存和缓冲区设置"
sysctl net.core.wmem_max
sysctl net.core.rmem_max
sysctl net.ipv4.tcp_rmem
sysctl net.ipv4.tcp_wmem
sysctl net.core.optmem_max 2>/dev/null || echo "net.core.optmem_max: [不支持]"# 网络性能和拥塞控制
print_header "网络性能和拥塞控制"
sysctl net.core.netdev_max_backlog
sysctl net.ipv4.tcp_slow_start_after_idle 2>/dev/null || echo "net.ipv4.tcp_slow_start_after_idle: [不支持]"
sysctl net.ipv4.tcp_mtu_probing
sysctl net.ipv4.tcp_sack
sysctl net.ipv4.tcp_window_scaling
sysctl net.ipv4.tcp_adv_win_scale 2>/dev/null || echo "net.ipv4.tcp_adv_win_scale: [不支持]"
sysctl net.ipv4.tcp_rfc1337 2>/dev/null || echo "net.ipv4.tcp_rfc1337: [不支持]"
sysctl net.ipv4.tcp_congestion_control# 连接跟踪相关
print_header "连接跟踪相关"
sysctl net.netfilter.nf_conntrack_max 2>/dev/null || echo "net.netfilter.nf_conntrack_max: [未加载conntrack模块]"
sysctl net.netfilter.nf_conntrack_tcp_timeout_established 2>/dev/null || echo "net.netfilter.nf_conntrack_tcp_timeout_established: [未加载conntrack模块]"
sysctl net.netfilter.nf_conntrack_tcp_timeout_time_wait 2>/dev/null || echo "net.netfilter.nf_conntrack_tcp_timeout_time_wait: [未加载conntrack模块]"
sysctl net.ipv4.conf.all.rp_filter# 其他系统限制
print_header "其他系统限制"
sysctl vm.swappiness
sysctl vm.max_map_count
sysctl kernel.panic 2>/dev/null || echo "kernel.panic: [不支持]"echo -e "\n脚本执行完毕。请将输出结果保存以便与优化参数进行对比。"

参数修改前后对比表格

压测客户端内核参数与默认值对比表

此表格展示了Linux系统默认内核参数值与已优化的压测客户端参数值的对比。

文件描述符和端口范围

参数默认值优化值变化比例影响
fs.file-max~65536200000030.5倍大幅提高系统可打开的文件描述符总数
fs.nr_open104857620000001.9倍提高单个进程可打开的文件描述符数量

TCP连接建立和释放

参数默认值优化值变化比例影响
net.ipv4.tcp_synack_retries5180%减少减少服务端响应SYN+ACK的重试次数
net.ipv4.tcp_max_syn_backlog10246553664倍极大提高SYN半连接队列容量
net.core.somaxconn12810485768192倍极大提高已完成连接队列容量
net.ipv4.tcp_fin_timeout601575%减少大幅加速FIN_WAIT连接的释放

TCP连接保持和超时

参数默认值优化值变化比例影响
net.ipv4.tcp_keepalive_time72006099%减少极大减少检测失效连接的等待时间
net.ipv4.tcp_keepalive_intvl753060%减少加速keepalive探测间隔
net.ipv4.tcp_keepalive_probes9367%减少减少确认连接失效前的探测次数

内存和缓冲区设置

参数默认值优化值变化比例影响
net.core.wmem_max2129921258291259倍极大提高写缓冲区上限
net.core.rmem_max2129921258291259倍极大提高读缓冲区上限
net.ipv4.tcp_rmem4096 87380 629145610240 87380 12582912最大值增加2倍提高TCP读缓冲区最大值
net.ipv4.tcp_wmem4096 16384 419430410240 87380 12582912最大值增加3倍提高TCP写缓冲区最大值
kernel.msgmnb655361310722倍提高消息队列的最大字节数
kernel.msgmax655361310722倍提高单个消息的最大字节数

网络性能和拥塞控制

参数默认值优化值变化比例影响
net.core.netdev_max_backlog10006553665.5倍极大提高网络设备接收队列容量
net.ipv4.tcp_max_tw_buckets18000014400008倍大幅提高TIME_WAIT状态连接的容量
net.ipv4.tcp_slow_start_after_idle10禁用防止空闲连接重启时的性能下降
net.ipv4.tcp_mtu_probing01启用提高网络路径MTU探测能力

其他系统限制

参数默认值优化值变化比例影响
vm.swappiness601083%减少大幅减少内存交换倾向
vm.max_map_count655302621444倍提高内存映射区域数量上限

参数应用

应用方法
将需要修改的参数添加到 /etc/sysctl.conf 文件或 /etc/sysctl.d/ 目录下的配置文件中,例如创建 /etc/sysctl.d/99-performance.conf,然后执行以下命令使其生效:
sudo sysctl -p /etc/sysctl.d/99-performance.conf
配置文件示例
以下是一个配置文件示例,只包含需要修改的参数:

# 文件描述符和端口范围
fs.file-max = 2000000
fs.nr_open = 2000000
net.ipv4.ip_local_port_range = 1024 65535# TCP连接建立和释放
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_max_syn_backlog = 65536
net.core.somaxconn = 1048576
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_syncookies = 1# TCP连接保持和超时
net.ipv4.tcp_keepalive_time = 60
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 3# 内存和缓冲区设置
net.core.wmem_max = 16777216
net.core.rmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 87380 16777216
kernel.msgmnb = 131072
kernel.msgmax = 131072
net.ipv4.tcp_mem = 786432 1048576 1572864# 网络性能和拥塞控制
net.core.netdev_max_backlog = 262144
net.ipv4.tcp_max_tw_buckets = 1440000
net.ipv4.tcp_slow_start_after_idle = 0
net.ipv4.tcp_mtu_probing = 1
net.ipv4.tcp_sack = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_notsent_lowat = 16384# 其他系统限制
vm.swappiness = 10
vm.max_map_count = 262144

ulimit调整

还需要调优ulimit数量,一般情况下都设置为65535,这里我的服务器基础性能高,所以给更大

vim /etc/security/limits.conf
# End of file
*               soft    nofile          1000000
*               hard    nofile          1000000
root            soft    nofile          1000000
root            hard    nofile          1000000

相关文章:

ubuntu高并发内核参数调优 - (压测客户端调优)

业务上要求集群提供10w并发,10w并发听上去不是很难,但10w并发持续1小时呢 在业务上线之前还需要我们自己对业务进行压测,俗称benchmark。 压测的服务器也是需要进行性能调优的,以下列出调优前后的参数对比,更直观的分析…...

动作捕捉手套如何让虚拟现实人机交互 “触手可及”?

在虚拟与现实逐渐交融的当下,动作捕捉技术正以前所未有的速度革新着多个领域。 动作捕捉技术,简称“动捕”,已经从早期的影视特效制作,逐步拓展到游戏开发、虚拟现实、机器人控制等多个领域。 而mHandPrO数据手套作为这一领域的…...

笔记本电脑关不了机是怎么回事 这有解决方法

在快节奏的现代生活中,笔记本电脑已成为我们工作、学习和娱乐的得力助手。在使用电脑的过程中,笔记本电脑突然关不了机了,怎么回事?下面驱动人生就来讲一讲笔记本电脑不能正常关机的解决方法,有需要的可以来看看。 一、…...

数据库:一文掌握 MongoDB 的各种指令(MongoDB指令备忘)

文章目录 入门连接 MongoDB Shell显示数据库切换数据库显示集合运行 JavaScript 文件 CRUD创建寻找文件使用运算符查找文档读取更新删除 数据库和集合Drop创建集合其他采集功能 索引列表索引创建索引删除索引隐藏/取消隐藏索引 方便的命令 其它改变流分片集群副本集 MongoDB 此…...

麒麟操作系统作为服务器,并且需要在浏览器上调试 MATLAB

在内网环境下,使用麒麟操作系统作为服务器,并且需要在浏览器上调试 MATLAB 程序,这确实复杂,但仍然有可行的解决方案。麒麟操作系统是国产化的 Linux 发行版(如基于 Ubuntu Kylin 或银河麒麟),因…...

给管理商场消防安全搭建消防安全培训小程序全过程

一、需求沟通 “我是管理商场消防安全的嘛,做这个的作用呢,1是商场的所有商户员工可以看平面或者视频随时自学, 2是我们定期培训必修课程、考试,这个需要留存他们的手签字的签到表确认我们讲给他们听了(免责很重要&am…...

Flutter:页面滚动,导航栏背景颜色过渡动画

记录:导航默认透明,页面发生滚动后,导航背景色由0-1,过渡到白色背景。 view import package:ducafe_ui_core/ducafe_ui_core.dart; import package:flutter/material.dart; import package:get/get.dart; import package:redo…...

VSCode + CMake

参考文献: 如何用 GCC, CMake 和 Make 编译C/C代码Windows 上的 Linux 子系统:WSLWSL:桌面 UI 远程连接 RDP 配置 VScode 文章目录 CMake 配置VSCode 配置launch.jsontask.jsonc_cpp_properties.json CMake 配置 编写如下的 CmakeLists.t…...

Docker进阶篇1:什么是Docker数据卷?为什么需要Docker数据卷?Docker数据卷3种类型介绍

大家好我是木木,在当今快速发展的云计算与云原生时代,容器化技术蓬勃兴起,Docker 作为实现容器化的主流工具之一,为开发者和运维人员带来了极大的便捷 。下面我们一起开始进阶第1篇:什么是Docker数据卷?为什…...

(2025|ICLR|华南理工,任务对齐,缓解灾难性遗忘,底层模型冻结和训练早停)语言模型持续学习中的虚假遗忘

Spurious Forgetting in Continual Learning of Language Models 目录 1. 引言 2. 动机:关于虚假遗忘的初步实验 3. 深入探讨虚假遗忘 3.1 受控实验设置 3.2 从性能角度分析 3.3 从损失景观角度分析 3.4 从模型权重角度分析 3.5 从特征角度分析 3.6 结论 …...

从两指到三指:Robotiq机器人自适应夹持器技术解析

工业自动化离不开高效工具的支持。Robotiq机器人工具凭借其模块化设计和智能化编程技术,提升了设备的灵活性和操作效率。Robotiq机器人工具精准的传感器和自适应夹持器技术,能够满足多样化的应用需求,为制造业、物流和科研等领域提供可靠的解…...

【css酷炫效果】纯CSS实现悬浮弹性按钮

【css酷炫效果】纯CSS实现悬浮弹性按钮 缘创作背景html结构css样式完整代码效果图 想直接拿走的老板,链接放在这里:https://download.csdn.net/download/u011561335/90492020 缘 创作随缘,不定时更新。 创作背景 刚看到csdn出活动了&…...

力扣222. 完全二叉树的节点个数(Java实现)

222. 完全二叉树的节点个数 1. 思路 这个题最简单的做法就是暴力遍历,时间复杂度为O(n)。 我们现在用低于O(n)的做法解决问题。 对于一棵满二叉树,它的节点数 2 h - 1 (h 是指树一共有多少层) 头节点不断遍历左孩子直至为null,得到树高…...

MySQL函数大全(持续更新)

MySQL常用函数 一、字符串函数 函数功能 CONCAT(s1, s2, ...) 拼接字符串 CONCAT_WS(sep, s1, s2, ...) 指定分隔符拼接字符串 SUBSTRING(str, start, length) 截取字符串 LEFT(str, length) 从左边截取指定长度字符串 RIGHT(str, length) 从右边截取指定长度字符串 LENGTH(s…...

Django系列教程(13)——Cookie和Session应用场景及案例

目录 什么是cookie,cookie的应用场景及缺点 Django中如何使用cookie Cookie使用示例 什么是session及session的工作原理 Django中如何使用会话session Session使用示例 小结 HTTP协议本身是”无状态”的,在一次请求和下一次请求之间没有任何状态保…...

element-ui pagination 组件源码分享

pagination 分页组件源码分享,主要从以下三个方面: 1、pagination 组件页面结构。 2、pagination 组件属性。 3、pagination 组件方法。 一、组件页面结构。 二、组件属性。 2.1 small 是否使用小型分页样式,类型为 boolean,…...

【css酷炫效果】纯CSS实现火焰文字特效

【css酷炫效果】纯CSS实现火焰文字特效 缘创作背景html结构css样式完整代码基础版进阶版(冰霜版) 效果图 想直接拿走的老板,链接放在这里:https://download.csdn.net/download/u011561335/90492005 缘 创作随缘,不定时更新。 创作背景 刚…...

【java面型对象进阶】------继承实例

继承结构下的标准Javabean 代码如下: package demo10;//定义员工父类 public class Employee {private String id;private String name;private double salary;//构造方法public Employee(){}public Employee(String id,String name,double salary){this.idid;thi…...

Oracle 19c 子分区表索引测试

一、建表语句放在最后,方便查看 二、创建各类索引 --创建本地的主键约束,但必须加上分区键、子分区键MT_O_CODE,M_YMD alter table MS_DMG.A_RED drop constraint MGR_PK_AREAD ; alter table MS_DMG.A_RED add constraint MGR_PK_AREAD primary key …...

【数据分享】1999—2023年地级市固定资产投资和对外经济贸易数据(Shp/Excel格式)

在之前的文章中,我们分享过基于2000-2024年《中国城市统计年鉴》整理的1999-2023年地级市的人口相关数据、染物排放和环境治理相关数据、房地产投资情况和商品房销售面积相关指标数据、社会消费品零售总额和年末金融机构存贷款余额、各类用地面积、地方一般公共预算…...

Spring Boot 与 Couchbase 整合教程

精心整理了最新的面试资料和简历模板,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 Spring Boot 与 Couchbase 整合教程 环境要求 JDK 8Spring Boot 2.7.xCouchbase Server 7.xMaven/Gradle 步骤 1:创建Spring Boot项目 使用 st…...

数据结构——串、数组和广义表

串、数组和广义表 1. 串 1.1 串的定义 串(string)是由零个或多个字符组成的有限序列。一般记为 S a 1 a 2 . . . a n ( n ≥ 0 ) Sa_1a_2...a_n(n\geq0) Sa1​a2​...an​(n≥0) 其中,S是串名,单引号括起来的字符序列是串的值, a i a_i a…...

Spring中DI与IOC的关系解析

在Spring框架中,DI(依赖注入)和IOC(控制反转)是两个核心概念,它们密切相关但有不同的侧重点。 IOC(控制反转) IoC 是一种设计原则,将对象的创建和依赖管理交给框架或容…...

pycharm-python國際象棋遊戲代碼

嗯,用户的问题是“pycharm寫關於python國際象棋遊戲代碼”,也就是要用PyCharm来写一个Python的国际象棋游戏代码。我需要先整理一下用户提供的搜索结果,看看有什么相关的信息可以利用。 首先看搜索结果中的各个网页内容。网页1主要讲的是象棋…...

【Java代码审计 | 第十四篇】MVC模型、项目结构、依赖管理及配置文件概念详解

未经许可,不得转载。 文章目录 MVC模型模型(Model)视图(View)控制器(controller)MVC工作流程 项目结构java目录resources目录webapp目录 依赖管理配置文件 MVC模型 MVC(Model-View-…...

单片机ADC+NTC温度采集电路学习

文章目录 前言一、NTC是什么?二、NTC重要参数三、实际应用举例四、NTC和PTC的区别总结 前言 NTC常用来检测外部环境或者电池温度,及汽车水温传感器。 有时候电池并不内置NTC,所以需要外置NTC来采集电池温度,注意要紧贴电池&#…...

【Spring Boot 中 `@Value` 注解的使用】

文章目录 一、前言二、Value 注解简介三、Value 注解的常见用法1. 读取 application.properties 或 application.yml 配置值(1)配置文件示例(2)Java 代码示例(3)测试输出 2. 使用 Value 设置默认值3. 读取系…...

分布式数据库系统(DDBS)

分布式数据库系统(DDBS) (Distributed Database System)的概念及其特点: 分布式数据库系统是一种数据库系统,它将数据分散存储在多个地理上分散的节点上,通过一个全局数据库管理系统(DBMS)来协调…...

2025年,电脑还需要分区吗?

随着2025年的到来,电脑存储空间已经不像以前那么金贵,固态硬盘(SSD)容量更大、速度更快,云存储也成了日常标配。许多人开始质疑:电脑还需要像以前那样分区吗? 一、分区到底是什么意思&#xff…...

一个成功的Git分支模型

本作品原发布账号为【白鸽子中文网】,现转至当前账号【飞翔中文网】。 反思备录(2020/3/5) 这个模型构思于2010年,现已过去10余年,(2010年)那时正处于Git诞生后不久。在这10年间,git-flow(本文中提到的分支模型) 在许多软件队伍里…...