性能压测报告

Posted 亦非我所愿丶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了性能压测报告相关的知识,希望对你有一定的参考价值。

文章目录







业务接口性能压测报告

一、说明

本次压力测试主要是为了找出系统瓶颈,提高单台服务器及整个集群的吞吐量,并根据负载均衡SLB,系统(cpu、mem、io、network、进程及文件限制,内核参数),nginx服务,php服务等进行优化,分别对盘古的四个接口,并通过单节点,nginx代理节点及cluster多节点进行压力测试;并对产生的数据进行汇总(本次数据汇总均为调优后的压测结果)

至于为何使用两种测试工具,因为单台mac主机jmeter无法向集群发出更多请求,所以为了数据的真实性,使用阿里云付费性能压力测试方案。

类别说明
压测工具1、apache-jmeter-5.1.1(单台压测)
2、阿里云性能测试系统(集群压测)
压测接口/api-x/site/user/getUser
/api-x/site/box/currentBox
/api-x/site/user/getShippingAddressList
/api-x/site/user/getCredit
压测性能相关参数协议: https
方法: get
并发数
总请求数
吞吐率(TPS)
响应时间
错误率

二、调优

1、slb
类别参数说明
slb加权最小连接数wlc针对权重轮询,并考虑后端实际连接数负载再轮询
slbslb.s1.small -> slb.s2.medium最大连接(100,000),新建连接数(10,000),查询(10,000)/Sec

2、内核
类别参数说明
kernelvm.nr_hugepages=512内核大页内存
kernelnet.core.somaxconn = 65535端口最大监听队列长度
kernelnet.ipv4.tcp_max_syn_backlogSYN同步包的最大客户端数量
kernelnet.ipv4.tcp_tw_reuse = 1TCP连接重用
kernelnet.ipv4.tcp_tw_recycle = 1TCP连接TIME-WAIT sockets的快速回收
kernelnet.ipv4.tcp_fin_timeout = 30FIN-WAIT-2状态时间

3、nginx
类别参数说明
nginxtengine-2.3.0老版本2.1.2升级
nginxworker_connections 2048 * 4nginx的最大进程数
nginxkeepalive_timeout 90nginx与后端的长链接时间
nginxbacklog 2048nginx backlog

4、php
类别参数说明
php.iniopcache.huge_code_pages=1php opcache的内存分页特性
php.iniopcache.file_cache=/tmpphp opcache的文件缓存
php.inimemory_limit = 2048Mphp的最大内存
php-fpmlisten.backlog=2048php的backlog
php-fpmpm = staticphp进程的运行模式
php-fpmpm.max_children = 240php的最大运行进程数
php-fpmpm.max_requests = 2000php的最大请求数
php-fpmrlimit_files = 10240php的最大文件数


三、盘古单节点压测数据

压测域名均为 pangu 线上域名(host解析),直接压测盘古接口(user --> slb --> 盘古)

  • 压测工具:apache-jmeter-5.1.1
  • 压测系统:macOS MACOS 10.13.6 I7 4G SSD
  • 压测主机:site-f
  • 压测说明
    针对每个接口分别执行并发数及总样本数(800,80000)(900,90000)(1000,100000)进行压力测试,并对产生的每秒TPS,响应时间(min,ave,max)及错误率进行统计
  • 压测结果:单节点可承受每秒1k并发


四、盘古单代理节点压测数据

压测域名均为 wwwx线上域名(host解析),通过site端进行反向代理到盘古端进行压测,较盘古单节点压力测试多一层SLB反向代理(user --> slb --> site --> slb --> 盘古)

  • 压测工具:apache-jmeter-5.1.1
  • 压测系统:macOS MACOS 10.13.6 I7 4G SSD
  • 压测主机:site-f
  • 压测说明
    针对每个接口分别执行并发数及总样本数(800,80000)(900,90000)(1000,100000)进行压力测试,并对产生的每秒TPS,响应时间(min,ave,max)及错误率进行统计
  • 压测结果:单节点可承受每秒1k并发


五、集群压测数据

通过对整个集群两台slb、六台服务器(分别部署site及盘古项目)进行压力测试
user --> slb --> site节点轮询 --> slb --> 盘古节点轮询

说明

  • 压测工具:阿里云性能测试系统
  • 压测系统:无
  • 压测主机:盘古集群
  • 压测接口:/api-x/site/user/getUser
1、每秒2000并发,总计5分钟压测数据

2000并发下的系统cpu使用率


2000并发下的每台nginx并发连接数


2000并发下的阿里云压力测试数据汇总

每秒2000并发的压测数据分析:

异常原因:由于响应时间为10s,所以超过10s的均为错误,异常率为0.8%

类别说明
接口/api-x/site/user/getUser
响应超时10s
吞吐率749.57
并发数2000
总样本数224870
成功率99.89%(224633/227)
异常数237
异常率0.11%


2、每秒3000并发,总计5分钟压测数据

3000并发下的系统cpu使用率


3000并发下的每台nginx并发连接数


3000并发下的阿里云压力测试数据汇总

每秒3000并发的压测数据分析:

异常原因:由于响应时间为10s,所以超过10s的均为错误,异常率为0.8%

类别说明
接口/api-x/site/user/getUser
响应时间2.8s
响应超时10s
吞吐率764.93
并发数3000
总样本数229449
成功率99.20%(227613/1863)
异常数1864
异常率0.8%

六、结论

1、说明

本次压测对index.html、index.php及多个项目接口的单机、代理、多层代理及集群等多种场景的内外网环境进行了压测,由于index页面和内网环境在某些情况下只是理论数据,所以没有进行统计,只是粗略的进行了nginx、php本身的最大负载压测;并对slb、系统内核参数、进程文件限制数、nginx、php等均进行了调优,覆盖了七层,四层场景,排除了潜在的影响系统性能的因素。


2、结果
  • 单台服务器实现并发1000
  • 集群可承载3000并发
  • 业务处理提升7%

3、瓶颈

对于单主机节点压测,并发达到800、900、1000的时候,接口平均响应时间都在5s及以上;并且qps略低

  • /api-x/site/user/getUser:143
  • /api-x/site/box/currentBox:100
  • /api-x/site/user/getShippingAddressList:200
  • /api-x/site/user/getCredit:220

getUser接口当并发达到3000的时候,集群压力会达到瓶颈

  • 后端少部分接口响应时间大于10s,平均响应时间3s(响应时间取决于接口每秒的吞吐量)
  • php 慢日志(暴露出很多大于1s的满日志)
  • rds 数据库连接数会达到上限(readonly-db3)

以上是关于性能压测报告的主要内容,如果未能解决你的问题,请参考以下文章

SSDB性能压测报告

性能测试实战 | 修改 JMeter 源码,定制化聚合压测报告

mysql 1040 too many connections,压测接口500提示数据库连接到达上限解决方案

开发的压测文档能有多小心谨慎~

开发的压测文档能有多小心谨慎~

后端服务性能压测实践