飞腾腾云S2500 Nginx单机环回测试性能调优方法

news2024/11/14 13:50:10

 【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力,聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域,包含了应用使能套件、软件仓库、软件支持、软件适配认证四大板块,旨在共享尖端技术,为开发者提供一个涵盖多领域的开发平台和工具套件。 点击这里开始你的技术升级之旅吧

image.png​​

 本文分享至飞腾开发者平台《飞腾腾云S2500 Nginx单机环回测试性能调优方法》

1 背景介绍

1.1 Nginx 简介

  Nginx是一个高性能HTTP和反向代理服务器,由俄罗斯程序员伊戈尔·赛索耶夫开发。Nginx 可以在大多数UNIX Linux OS 上编译运行,并有Windows移植版。

  Nginx特点是占有内存少,并发能力强,稳定性高等优势,并且依靠并发能力强,丰富的模块库以及友好灵活的配置而闻名。在Linux操作系统下,Nginx使用epoll事件模型使得在Linux操作系统下效率相当高。

  Nginx简介的详细内容可参考:https://baike.baidu.com/item/nginx/3817705?fr=aladdin

1.2 未优化前性能

  测试环境:飞腾腾云S2500 2路服务器

  测试方法:在飞腾腾云S2500环回访问本地nginx服务

  未优化前的nginx(日志写入硬盘)性能:16-17w req/s。

  未优化前的nginx(日志写入内存)性能:21-23w req/s。

  未优化前的nginx(不写日志情况)性能:24-25w req/s。

2 问题分析

2.1 性能影响因素分析

image.png

2.2 主要的优化方向

image.png

3 修改内核协议栈参数

3.1 优化措施

  通过修改一些内核参数:

image.png

  主要手段:通过调整以上参数的大小,以此来提高tcp连接时的带宽和时延,从而提升服务性能。

调优项目作用
net.ipv4.tcp_mem确定 TCP 栈应该如何反映内存使用
net.ipv4.tcp_rmemTCP接收缓冲区大小
net.ipv4.tcp_wmemTCP发送缓冲区大小
net.core.somamaxconn表示socket监听的backlog(监听队列)上限
net.ipv4.tcp_syn_retries发起TCP SYN连接超时重传的次数
net.ipv4.tcp_max_orphans所能处理不属于任何进程的TCPsockets最大数

3.2 测试结论

  结论:经测试验证,以上优化措施均未见明显的性能提升,距离目标300000 req/s相距甚远。

4 Nginx主要的优化工作

4.1 调优工作

  Nginx 调优项目:

image.png

  以上调优项目对应的调试手段见下表所示:

nginx 参数作用建议
log记录nginx 日志关闭
nginx worker processesnginx 进程数根据打开日志与否调整processes大小,日志开启,建议设为16进程,日志关闭,则越大越好。
tcp_nopush_on避免网络拥塞打开
tcp_nodelay_off避免网络拥塞tcp_nodelay off
sendfile on文件高效传输模式打开,并配合tcp_nopush使用
open file cache调整文件指定缓存功能的开关打开,并合理指定大小,建议max至少102400
reset time out connnginx关闭不响应的客户端连接开启此功能

  以上的调优手段,着重讲下sendfile 与open file cache,此两项的配置对性能提升最为明显:

  1、sendfile:

  sendfile实际上是Linux2.0+以后的推出的一个系统调用,web服务器可以通过调整自身的配置来决定是否利用sendfile这个系统调用。
  1)先来看一下不用 sendfile的传统网络传输过程:

image.png

  上面4个步骤有4次上下文切换,有4次拷贝,我们发现如果能减少切换次数和拷贝次数将会有效提升性能。

  2)使用sendfile(socket,file, len)的IO过程:

image.png

  sendFile 整个过程只有两次上下文切换和两次 DMA 拷贝,很重要的一点是这里完全不需要CPU 来进行拷贝了,所以才叫做零拷贝,这里的拷贝指的就是操作系统的层面。
  以上关于sendfile的内容可以参考:https://blog.csdn.net/YL3126/article/details/117468640。

  2、open_file_cache max=102400 inactive=20s:

  Nginx 的 open_file_cache 相关配置可以缓存静态文件的元信息,在这些静态文件被频繁访问时可以显著提升性能。缓存了文件句柄就意味着不用每次都close一个文件再open一个文件,减少了系统调用的操作。
  上表中的调优手段,可以通过更改Nginx的配置文件nginx.conf 来实现。

4.2 测试记录

4.2.1 关闭 Ngnix日志功能测试

  1、worker_processes==16

  绑核测试,在飞腾腾云S2500服务器本地输入命令,该命令如下所示:

taskset -c 32-63 weighttp -n 3000000 -c 100 -t 50 -k <http://11.1.1.1:80>
测试次数结果(req/s)
1285713
2282235
3286919
4285477
5289397
平均值285948

  不绑核测试,在飞腾腾云S2500 服务器本地输入命令,该命令如下所示:

weighttp -n 3000000 -c 100 -t 50 -k <http://11.1.1.1:80>
测试次数结果(req/s)
1248677
2279867
3290159
4270982
5283741
平均值274687.4

  2、worker_processes==22

  绑核测试:在飞腾腾云S2500服务器本地输入命令,该命令如下所示:

taskset -c 32-63 weighttp -n 3000000 -c 100 -t 50 -k http://11.1.1.1:80
测试次数结果(req/s)
1354322
2343963
3346928
4349629
5342861
平均值347540

  不绑核测试:在飞腾腾云S2500服务器本地输入命令,该命令如下所示:

weighttp -n 3000000 -c 100 -t 50 -k http://11.1.1.1:80
测试次数结果(req/s)
1300276
2285604
3219688
4283422
5295507
平均值276899
4.2.2 打开Ngnix日志功能测试

4.2.2.1 日志写入内存

  1、worker_processes==16

  绑核测试,在飞腾腾云S2500服务器本地输入命令,该命令如下所示:

taskset -c 32-63 weighttp -n 3000000 -c 100 -t 50 -k <http://11.1.1.1:80>
测试次数结果(req/s)
1274568
2278908
3283300
4274235
5277759
平均值277754

  不绑核测试,在飞腾腾云S2500服务器本地输入命令,该命令如下所示:

weighttp -n 3000000 -c 100 -t 50 -k http://11.1.1.1:80
测试次数结果(req/s)
1277621
2258456
3260107
4252588
5253443
平均值260443

  2、worker_processes==22

  绑核测试,在飞腾腾云S2500服务器本地输入命令,该命令如下所示:

taskset -c 32-63 weighttp -n 3000000 -c 100 -t 50 -k http://11.1.1.1:80
测试次数结果(req/s)
1334128
2323585
3328500
4329572
5329261
平均值329009

  不绑核测试,在飞腾腾云S2500服务器本地输入命令,该命令如下所示:

weighttp -n 3000000 -c 100 -t 50 -k http://11.1.1.1:80
测试次数结果(req/s)
1282196
2300277
3259707
4198777
5247318
平均值257655

4.2.2.2 日志写入硬盘

  性能测试时,通过perf查看热点函数,在worker_processes大于16时,随worker_processes不断增大,热点函数”osq_lock”占比逐渐增大,吞吐量基本没有提升,每个进程还都满负载,多余的CPU性能都被osq_lock给消耗了。
  综上,日志写在硬盘的情况下,选择16进程,性能最佳。

  测试记录:
  绑核测试,在飞腾腾云S2500服务器本地输入命令,该命令如下所示:

taskset -c 32-63 weighttp -n 3000000 -c 100 -t 50 -k http://11.1.1.1:80
次数结果(req/s)
1266764
2269377
3264932
4267018
5268114
平均值267241

  不绑核测试,在飞腾腾云S2500服务器本地输入命令,该命令如下所示:

weighttp -n 3000000 -c 100 -t 50 -k http://11.1.1.1:80
测试次数结果(req/s)
1240303
2254572
3266540
4229249
5242094
平均值246551

5 结论

  经过优化后的具体测试结果见下表:

不写日志
绑核不绑核
16 processes285948274687
22 processes347540276899
写日志(内存)
绑核不绑核
16 processes277754260443
22 processes329009257655
写日志(硬盘)
绑核不绑核
16 processes267241246551

  优化前后的(最优状态下)性能对比图:

image.png

  综上所述:

  1、优化前后对比,性能提升近50%。

  2、nginx不写日志时,性能明显高于写日志时,且不写日志时,随着进程数目增加,性能会越高。日志写入内存时,性能高于写入硬盘。同等条件下,weighttp绑核的性能要明显高于不绑核的性能,且weighttp不绑核时的性能波动很大。

推荐阅读

  • 飞腾平台虚拟机组播性能调优指南
  • SPECweb2009调优指南

欢迎广大开发者来飞腾开发者平台获取更多前沿技术文档及资料

如开发者在使用飞腾产品有任何问题可通过在线工单联系我们


版权所有。飞腾信息技术有限公司 2023。保留所有权利。

未经本公司同意,任何单位、公司或个人不得擅自复制,翻译,摘抄本文档内容的部分或全部,不得以任何方式或途径进行传播和宣传。

商标声明

Phytium和其他飞腾商标均为飞腾信息技术有限公司的商标。

本文档提及的其他所有商标或注册商标,由各自的所有人拥有。

注意

本文档的内容视为飞腾的保密信息,您应当严格遵守保密任务;未经飞腾事先书面同意,您不得向任何第三方披露本文档内容或提供给任何第三方使用。

由于产品版本升级或其他原因,本文档内容会不定期进行更新。除非另有约定,本文档仅作为使用指导,飞腾在现有技术的基础上尽最大努力提供相应的介绍及操作指引,但飞腾在此明确声明对本文档内容的准确性、完整性、适用性、可靠性的等不作任何明示或暗示的保证。

本文档中所有内容,包括但不限于图片、架构设计、页面布局、文字描述,均由飞腾和/或其关联公司依法拥有其知识产权,包括但不限于商标权、专利权、著作权等。非经飞腾和/或其关联公司书面同意,任何人不得擅自使用、修改,复制上述内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1941250.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vulnhub靶场DC-7练习

目录 0x00 准备0x01 主机信息收集0x02 站点信息收集1. 获取用户名/密码2. ssh连接目标主机3. drush命令修改Drupal密码 0x03 漏洞查找与利用1. Drupal写入php木马2. 连接shell3. 反弹shell并提权 0x04 总结 0x00 准备 下载链接&#xff1a;https://download.vulnhub.com/dc/DC-…

深度学习每周学习总结N4:中文文本分类-Pytorch实现(基本分类(熟悉流程)、textCNN分类(通用模型)、Bert分类(模型进阶))

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 目录 0. 总结&#xff1a;1. 基础模型a. 数据加载b. 数据预处理c. 模型搭建与初始化d. 训练函数e. 评估函数f.拆分数据集运行模型g. 结果可…

git命令学习分享

分布式版本控制系统&#xff0c;本地仓库和远程仓库相互独立。 使用repository仓库进行控制&#xff0c;可以对里面的文件进行跟踪&#xff0c;复原。 git config --global --list&#xff1a;查看git配置列表 cd ** &#xff1a;进入** cd .. &#xff1a;退回上一级 echo…

【人工智能】Transformers之Pipeline(四):零样本音频分类(zero-shot-audio-classification)

​​​​​​​ 目录 一、引言 二、零样本音频分类&#xff08;zero-shot-audio-classification&#xff09; 2.1 概述 2.2 意义 2.3 应用场景 2.4 pipeline参数 2.4.1 pipeline对象实例化参数​​​​​​​ 2.4.2 pipeline对象使用参数 2.4 pipeline实战 2.5 模…

TinyVue:与 Vue 交往八年的组件库

本文由体验技术团队莫春辉老师原创~ 去年因故停办的 VueConf&#xff0c;今年如约在深圳举行。作为东道主 & 上届 VueConf 讲师的我&#xff0c;没有理由不来凑个热闹。大会结束后&#xff0c;我见裕波在朋友圈转发 Jinjiang 的文章《我和 Vue.js 的十年》&#xff0c;我就…

版本控制工具

版本控制工具是用于记录代码文件变化历史、方便查阅特定版本修改情况的系统&#xff0c;一般分为集中式和分布式两种。以下是一些常见的版本控制工具&#xff1a; 集中式版本控制工具 Subversion&#xff08;SVN&#xff09; 简介&#xff1a;Subversion是一种集中式版本控制…

【LeetCode】day15:110 - 平衡二叉树, 257 - 二叉树的所有路径, 404 - 左叶子之和, 222 - 完全二叉树的节点个数

LeetCode 代码随想录跟练 Day15 110.平衡二叉树257.二叉树的所有路径404.左叶子之和222.完全二叉树的节点个数 110.平衡二叉树 题目描述&#xff1a; 给定一个二叉树&#xff0c;判断它是否是 平衡二叉树 平衡二叉树的定义是&#xff0c;对于树中的每个节点&#xff0c;其左右…

文件包含漏洞: 函数,实例[pikachu_file_inclusion_local]

文件包含 文件包含是一种较为常见技术&#xff0c;允许程序员在不同的脚本或程序中重用代码或调用文件 主要作用和用途&#xff1a; 代码重用&#xff1a;通过将通用函数或代码段放入单独的文件中&#xff0c;可以在多个脚本中包含这些文件&#xff0c;避免重复编写相同代码。…

昇思25天学习打卡营第27天 | Diffusion扩散模型

学习心得&#xff1a;探索Diffusion扩散模型 在我最近对生成模型的学习中&#xff0c;尤其是Diffusion模型&#xff0c;我发现这是一种极具潜力的技术&#xff0c;特别是在图像生成领域。Diffusion模型的核心概念是通过一个逐步的去噪过程&#xff0c;将纯噪声数据转换成有意义…

算法——双指针(day4)

15.三数之和 15. 三数之和 - 力扣&#xff08;LeetCode&#xff09; 题目解析&#xff1a; 这道题目说是三数之和&#xff0c;其实这和我们之前做过的两数之和是一个规律的~无非就是我们需要实时改动target的值。先排好序&#xff0c;然后固定一个数取其负值作target&#xf…

单链表<数据结构 C版>

目录 概念 链表的单个结点 链表的打印操作 新结点的申请 尾部插入 头部插入 尾部删除 头部删除 查找 在指定位置之前插入数据 在任意位置之后插入数据 测试运行一下&#xff1a; 删除pos结点 删除pos之后结点 销毁链表 概念 单链表是一种在物理存储结构上非连续、非顺序…

Golang | Leetcode Golang题解之第264题丑数II

题目&#xff1a; 题解&#xff1a; func nthUglyNumber(n int) int {dp : make([]int, n1)dp[1] 1p2, p3, p5 : 1, 1, 1for i : 2; i < n; i {x2, x3, x5 : dp[p2]*2, dp[p3]*3, dp[p5]*5dp[i] min(min(x2, x3), x5)if dp[i] x2 {p2}if dp[i] x3 {p3}if dp[i] x5 {p5…

【PostgreSQL教程】PostgreSQL 选择数据库

博主介绍:✌全网粉丝20W+,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物联网、机器学习等设计与开发。 感兴趣的可…

图论模型-迪杰斯特拉算法和贝尔曼福特算法★★★★

该博客为个人学习清风建模的学习笔记&#xff0c;部分课程可以在B站&#xff1a;【强烈推荐】清风&#xff1a;数学建模算法、编程和写作培训的视频课程以及Matlab等软件教学_哔哩哔哩_bilibili 目录 ​1图论基础 1.1概念 1.2在线绘图 1.2.1网站 1.2.2MATLAB 1.3无向图的…

基于SpringBoot+Vue的校园疫情防控系统(带1w+文档)

基于SpringBootVue的校园疫情防控系统(带1w文档) 基于SpringBootVue的校园疫情防控系统(带1w文档) 主要对首页、个人中心、学生管理、疫情动态管理、知识信息管理、防疫教育管理、健康打卡管理、请假申请管理、出校登记管理、入校登记管理、核酸报告管理、交流论坛、系统管理的…

MySQL的建表及查询

一。建立表 mysql> create table student(id int(10) not null unique primary key,name varchar(20) not null,sex varchar(4),birth year,department varchar(20),address varchar(50)); mysql> create table score(id int(10) not null unique primary key auto_incr…

精明选择施工项目管理工具的实用建议

国内外主流的10款施工项目进度管理软件对比&#xff1a;PingCode、Worktile、Contractor Foreman、建设工程项目管理平台&#xff08;JSGC&#xff09;、智慧工地综合管理系统、工程项目信息管理系统&#xff08;GCXX&#xff09;、Buildertrend、Procore、Autodesk Constructi…

Edge侧边栏copilot消失

Edge侧边栏copilot消失 当前环境 自己ip问题已解决&#xff0c;edge中已登录账号&#xff0c;地区已设置为美国&#xff0c;语言已设置为英文。具体可以通过空白页右上角的setting验证 解决方案 首先&#xff0c;打开“任务管理器”&#xff0c;在其中找到 Microsoft Edge…

【C语言】动态内存管理(下)(realloc函数)

文章目录 前言1. realloc2. realloc函数在调整空间时的细节2.1 针对情况1&#xff08;realloc后面有足够的内存空间&#xff09;2.2 针对情况2&#xff08;realloc后面没有足够的内存空间&#xff09;2.3 realloc函数使用的注意事项2.4 realloc的使用实例2.5 realloc函数的补充…

ubuntu安装mysql8.0

文章目录 ubuntu版本安装修改密码取消root跳过密码验证 ubuntu版本 22.04 安装 更新软件包列表 sudo apt update安装 MySQL 8.0 服务器 sudo apt install mysql-server在安装过程中&#xff0c;系统可能会提示您设置 root 用户的密码&#xff0c;请务必牢记您设置的密码。…