性能压测报告

文章目录

      • 业务接口性能压测报告
        • 一、说明
        • 二、调优
          • 1、slb
          • 2、内核
          • 3、nginx
          • 4、php
        • 三、盘古单节点压测数据
        • 四、盘古单代理节点压测数据
        • 五、集群压测数据
          • 1、每秒2000并发,总计5分钟压测数据
          • 2、每秒3000并发,总计5分钟压测数据
        • 六、结论
          • 1、说明
          • 2、结果
          • 3、瓶颈







业务接口性能压测报告

一、说明

本次压力测试主要是为了找出系统瓶颈,提高单台服务器及整个集群的吞吐量,并根据负载均衡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 针对权重轮询,并考虑后端实际连接数负载再轮询
slb slb.s1.small -> slb.s2.medium 最大连接(100,000),新建连接数(10,000),查询(10,000)/Sec

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

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

4、php
类别 参数 说明
php.ini opcache.huge_code_pages=1 php opcache的内存分页特性
php.ini opcache.file_cache=/tmp php opcache的文件缓存
php.ini memory_limit = 2048M php的最大内存
php-fpm listen.backlog=2048 php的backlog
php-fpm pm = static php进程的运行模式
php-fpm pm.max_children = 240 php的最大运行进程数
php-fpm pm.max_requests = 2000 php的最大请求数
php-fpm rlimit_files = 10240 php的最大文件数


三、盘古单节点压测数据

压测域名均为 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并发
    性能压测报告_第1张图片

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

压测域名均为 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并发

性能压测报告_第2张图片


五、集群压测数据

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

说明

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

2000并发下的系统cpu使用率
性能压测报告_第3张图片

2000并发下的每台nginx并发连接数
性能压测报告_第4张图片

2000并发下的阿里云压力测试数据汇总
性能压测报告_第5张图片

每秒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使用率
性能压测报告_第6张图片

3000并发下的每台nginx并发连接数
性能压测报告_第7张图片

3000并发下的阿里云压力测试数据汇总
性能压测报告_第8张图片

每秒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)

你可能感兴趣的:(乱乱放)