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

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

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不绑核时的性能波动很大。

推荐阅读

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

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


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

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

商标声明

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

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

注意

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

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

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

  • 7
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 飞腾S2500的CPU无法生成vmcore,这可能是由于内核参数未设置正确导致的。您可以尝试在内核启动参数中添加"crashkernel=128M",然后重新启动系统。这将允许内核在发生崩溃时生成vmcore文件。 另外,还可能是由于硬件问题导致的,您可以尝试检查硬件是否存在问题或者更新硬件驱动程序。 如果这些都没有解决问题,您可以考虑寻求技术支持或者更换新的CPU。 ### 回答2: 如果飞腾S2500的CPU无法生成vmcore,可能是由于硬件或软件故障导致的。下面是处理此问题的一些方法: 1. 检查硬件连接:首先检查CPU与主板之间的连接是否良好,确保CPU插槽没有松动或脏污。可以试着重新插拔CPU以确保连接正常。 2. 更新固件和驱动程序:飞腾S2500的CPU可能需要更新固件和驱动程序才能正常工作。访问飞腾官方网站,查找更新版本的固件和驱动程序,并按照官方提供的指引来进行更新。 3. 检查操作系统:如果使用Windows操作系统,可能需要检查操作系统是否需要更新或重新安装。确保操作系统版本与飞腾S2500的CPU兼容,并按照官方提供的指引进行更新或重新安装。 4. 检查BIOS设置:进入计算机的BIOS设置界面,检查CPU相关的设置是否正确。可以尝试将设置重置为默认值,并保存设置后重新启动计算机。 5. 联系技术支持:如果以上方法都无法解决问题,建议联系飞腾的技术支持团队。提供详细的问题描述,并提供系统的硬件和软件信息,以便他们更好地诊断和解决问题。 需要注意的是,如果以上方法无法解决问题,可能需要将计算机送修或更换故障的硬件部件。还请注意备份重要的数据,以免因处理过程中造成数据丢失。 ### 回答3: 如果飞腾S2500的CPU无法生成vmcore(内核转储文件),我们可以尝试以下几种处理方式。 首先,确保系统中已经安装了kdump工具和相关依赖。kdump是一个用于在内核崩溃时生成内核转储文件的工具。如果系统没有安装kdump,我们可以通过命令行执行以下命令进行安装: ``` sudo apt-get install kdump-tools ``` 其次,检查是否已经启用了kdump。我们可以通过以下命令来检查kdump是否已经启用: ``` sudo systemctl status kdump ``` 如果kdump没有启用,我们可以通过编辑`/etc/default/kdump-tools`文件来启用kdump。打开文件并将`USE_KDUMP="1"`修改为`USE_KDUMP="yes"`,然后保存并关闭文件。 接下来,重启服务器以使修改生效: ``` sudo reboot ``` 在系统启动时,kdump应该已经启用。我们可以使用以下命令来检查kdump是否正在运行: ``` sudo systemctl status kdump ``` 如果kdump仍无法生成vmcore文件,我们可以尝试更新kdump工具和相关依赖: ``` sudo apt-get update sudo apt-get upgrade kdump-tools ``` 如果更新仍未解决问题,我们可以查看系统日志以获取更多信息: ``` sudo journalctl -u kdump ``` 最后,如果问题仍然存在,我们可以尝试与服务器制造商或飞腾S2500的支持团队联系,向他们报告问题并寻求他们的帮助和支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值