问题原因找到了,那就好办了。

    找到阿里云技术人员,让他们强行给我们上架了一个共享代理模式的RDS。  并重新进行压力测试。

  哦豁~ 开心,压力测试顺利,异常率大大降低实际为:

  数据库DBA反馈,数据库收到很多请求处理,数据库开始正常工作。(之前都是,数据库连接满,但活跃连接只有1到5个)。 数据库连接数在50到100之间波动,且基本都是活跃连接。

  NGINX和php那边都工作正常,服务器cpu压力下降。各项功能都平稳。

  然后开始真真正正进行模拟生产用户数据压力测试:

  

   生产环境数据如下:

    高峰时期: 总并发连接数12w 活跃连接数10万;新建连接数1300/s;吞吐量:6200/S。

    如何通过调整jmeter脚本的线程数,吞吐量来实现该场景,就得多次尝试了。

   jmeter运行环境如下: centos7   java1.8.161; jmeter 5.2.1   4C8G。 阿里云机器。

  

    1,实现并发连接数和活跃连接数。

      并发连接数=活跃连接数+非活跃连接数

        活跃连接数=jmeter线程数*执行机器数量

        非活跃连接数=tcp连接中断数: 实际执行过程中发现:如果设置的吞吐量过高,会造成大量的非活跃连接数。与真实请求场景不一致。 后面细说。

    

       如何提升活跃连接数:------加机器+内存。没其它办法。现在的机器一般cpu都是够用的。  实际设置1800线程运行时,机器只有20%的cpu使用率。

        

        通过测试的经验计算,大概一个线程需要消耗3M内存。所有如果想跑2000线程,那么你得设置虚拟机6000m,否则,会爆出内存溢出错误。

        通过命令启动执行机:

        JVM_ARGS="-Xms1024m -Xmx6000m" ./jmeter-server &     ####注意,不要超过自己机器实际能使用的内存!!!!留点空闲给机器本身用,否则会很卡,很慢。异常高。

        我喜欢这种方式,方便调整内存。哈哈。

          顺便写几个清理内存和杀进程的命令:

查看执行机运行日志:
tail -f apache-jmeter-5.2.1/bin/jmeter-server.log 查看1099端口:
netstat -an|grep 1099 查看java进程:
ps -ef|grep java 批量杀进程操作:我特别喜欢哈哈
ps -ef|grep java|awk '{print $2}'|xargs kill -9 统计查询tcp 80端口数量:
netstat -nat|grep -i 80|wc -l 统计查询tcp time_wait 端口数量:
netstat -an | awk '/^tcp/ {++s[$NF]} END {for(a in s) print a,s[a]}' 查看内存使用量:
free -m 同步缓存:
sync 清理内存:建议在杀java进程后使用,先使用sync同步。
echo 3 > /proc/sys/vm/drop_caches

  实际运行效果,机器正常跑2000线程正常,不卡,不慢,非常happy~

  

   然后计算10万用户=10万除以2000===50个机器~~~ 汗~~有点难申请。还要加5个调度机、、一共是55个机器~  1个调度机带10个执行机。

     和大佬凶猛的沟通了一阵子~ 同意了。直接在阿里云上复制已经调试好jmeter的执行机。刷刷刷刷~~~机器到手了。 反正阿里云按量收费,用一天也没多少钱。

   

    如何降低非活跃连接数呢?

      由于我设置的tcp连接超时周期为30秒,当我未对吞吐量进行限制时:发现非活跃连接数非常多。 这与生产环境不一致。(该测试结果图片基于 1带13执行机,用户线程1500.当时的吞吐量为12000/s,大大超过实际的需求)

      

  生产环境数据:

  仔细琢磨计算了一下。生产10万活跃用户,才6200吞吐量,那么。 2万活跃用户的吞吐量应该是===1300:

    这里发现一个关键指标: 新建并发连接数:生产环境高峰期也就1300,而我 6000+;所以,会出现大量的非活跃连接请求就很正常了。

    解决办法:使用jmeter定时器》》精准吞吐量计时器来对吞吐量进行限制。降低新建连接数,降低吞吐量。

    通过计算:20000活跃用户吞吐量1300,那么jmeter脚本2000线程对于吞吐量是130/s。额好低。不忍直视。习惯了几千几千上万的,吞吐量。最后发现只要设置130。

          所以:这里有一个结论,真真的性能大神测试时,都不是像我这样的搞茫茫多机器去跑,一般也就设置100到200线程,进行服务器性能测试。通过性能调优来优化服务器。通过对测试结果日志的分析,来找到服务器问题的。

             而不是像我这样,去想着把服务器搞挂,来复现问题…………  

    好了,设置好jmeter吞吐量,再进行一波测试。

非活跃连接数大大降低~~达到理想要求。  但还是比较多~ 新建请求连接数1690~ 超过高峰1300. 还需要慢慢优化~

      

  脚本环境都调试完毕,以后,就开始加机器,测试吧~~~

  待补充: 等测完了再来补充

 过去了一个月,终于有时间来补欠下的债了。。

   

  与运维沟通配置3套压测机环境,都是1带14.共组成42个执行机。

  单机脚本配置2200用户。

  测试接口共配置51个业务接口,共组成7个业务流程。

  测试计划为:

业务量类型

80%

100%

150%

目的

并发数

9600

12000

18000

分析性能变化趋势

分析性能问题

帮助定容定量

TPS

4960

6200

9300

新建连接数

1680

2100

3250

 

        80% 场景结果:

根据图表数据可以看到;业务系统服务器内存使用40%,cpu使用52%,服务器各个指标稳定。Jmeter请求响应平均响应时间100ms,请求异常数量为0;RDS各项指标也很稳定,主库从库连接数,TPS都很正常。请求连接没有积压。

100%请求场景:

根据测试结果数据可以看到,业务系统服务器CPU,内存稳定,负载均衡器也很稳定。RDS主库和从库都很稳定。

Jmeter 请求有0.05%的异常概率,经过分析,为压测机器tcp端口耗尽超时导致。不影响服务器性能。

150%性能场景:

当进行150%负载时,服务器cpu达到90%以上,并出现排队现象。

TPS/QPS稳定在9000左右。 数据RDS连接数增加到100%时的几倍。请求响应平均时间为400ms。服务器已经满负荷运行。

使用手机进行打开APP进行体验:打开页面缓慢,打开链接页面在3秒左右,但都能正常操作。服务器能正常处理数据,未出现卡死,奔溃。

稳定性测试结果: 持续运行3小时。

测试结果:实际活跃连接数为90000左右,总连接数为155500左右。服务器cpu性能跑满。RDS压力不大。持续运行3小时后,系统能正常提供服务,但比较慢。

  

测试结果总结:

参数

测试数据

性能指标

80%

100%

150%

ART(ms)

90

100

400

TPS

4900

6050

9000

CPU

40.1%

40.2%

90%

MEM

40

40

44

RDS主QPS/TPS

1811/257

1781/303

2624/412

RDS读QPS/TPS

13195/279

12820/289

19443/411

测试数据已经完成,剩下的就是分析调优了,这个后续再开新章节。

遇到一个新的错误: 机器内存耗尽了。自动杀死进程。--调整jvm的内存,减少线程数。保证可用内存大于200M。

  

  

    

  

    

    

Jmeter压力测试笔记(6)性能调测-压力并发-模拟生产环境数据的更多相关文章

  1. Nginx网络架构实战学习笔记(五):大访问量优化整体思路、ab压力测试及nginx性能统计模块、nginx单机1w并发优化

    文章目录 大访问量优化整体思路 ab压力测试及nginx性能统计模块 ab压力测试及nginx性能统计模块 ab压力测试 nginx性能统计模块 nginx单机1w并发优化 整装待发: socket ...

  2. 软件性能测试分析与调优实践之路-JMeter对RPC服务的性能压测分析与调优-手稿节选

    一.JMeter 如何通过自定义Sample来压测RPC服务 RPC(Remote Procedure Call)俗称远程过程调用,是常用的一种高效的服务调用方式,也是性能压测时经常遇到的一种服务调用 ...

  3. 测试开发mysql性能调优总结(一)

    测试开发mysql性能调优总结 mysql在创建表的时候,对每个字段选择合适的数据类型很重要! 根据个人的经验总结: 整数类型选择 INT小数类型选择 DECIMAL字符串类型选择 TEXT日期时间选 ...

  4. OCM_第十三天课程:Section6 —》数据库性能调优 _结果缓存 /多列数据信息采集统计/采集数据信息保持游标有效

    注:本文为原著(其内容来自 腾科教育培训课堂).阅读本文注意事项如下: 1:所有文章的转载请标注本文出处. 2:本文非本人不得用于商业用途.违者将承当相应法律责任. 3:该系列文章目录列表: 一:&l ...

  5. JVM性能优化--JVM参数配置,使用JMeter简单测试配合说明参数调优

    一.JVM参数配置 1.常见参数配置 -XX:+PrintGC 每次触发GC的时候打印相关日志 -XX:+UseSerialGC 串行回收 -XX:+PrintGCDetails 更详细的GC日志 - ...

  6. JMeter压力测试,http请求压测,5分钟让你学会如何压测接口!

    JMeter压力测试 官网:https://jmeter.apache.org 最新款的jmeter需要java8的支持,所以请自行安装jdk8.这里就不啰嗦了. 可以根据自己的系统下载zip或者是t ...

  7. Jmeter 压力测试笔记(2)--问题定位

    事情已经出了,是该想办法解决的时候了. 经过运维和DBA定位: 数据库读写分离中,读库延时超过了30秒,导致所有请求都压在主库.另外所有数据库都连接数都被占满,但活跃请求数量缺不多. 数据库16K的连 ...

  8. jmeter压力测试笔记- HTTP协议

    一.目标 使用jmeter进行HTTP接口压力测试: 命令行方式运行,方便在linux环境运行: 二.面临的问题 支持多环境测试(开发.测试.生产环境) 支持用户数据.线程数.循环次数等配置在运行时自 ...

  9. Jmeter 压力测试笔记(4)--分布式部署

    分布式部署:坑,大坑~ 超级坑~~~~ 在这里坑了2天,整整2天.其它略过不表下面只写经验: 在linux下,centos7系统   1主 14执行机. jmeter版本 5.2.1  所有机器在同一 ...

随机推荐

  1. pytest、tox、Jenkins实现python接口自动化持续集成

    pytest介绍 pytest是一款强大的python测试工具,可以胜任各种级别的软件测试工作,可以自动查找测试用并执行,并且有丰富的基础库,可以大幅度提高用户编写测试用例的效率,具备可扩展性,用户自 ...

  2. C语言程序设计(一) 为什么要学C语言

    第一章 为什么要学C语言 学编程的过程,其实就是学习怎样用编程语言说话,让编译器听懂的过程. 汇编语言缺少“可移植性” 除了机器语言和汇编语言以外,几乎所有的编程语言都被统称为高级语言,它的特点是更接 ...

  3. XMind ZEN 2020 (10.0.2) 全平台 完美破解版(ubuntu)

    XMind ZEN 2020 (10.0.2) 全平台 完美破解版(ubuntu) https://www.ghpym.com/xmindzen.html/comment-page-8?replyto ...

  4. 【股票盯盘软件】01_程序员炒股之开发一款极简风格的股票盯盘软件StockDog_V1.0.0.1

    1.前言 话说最近一段时间受疫情的影响,股市各种妖魔横行.本人作为一个入股市不满三年的小韭菜,就有幸见证了好几次历史,也是满心惊喜,就权当是接受资本市场的再教育了吧. 小韭菜的炒股方法其实很简单,这两 ...

  5. Mybatis---在控制台打印sql语句

    在mybatis主配置文件中mybatis.xml的<configuration>标签中加入 <settings> <setting name="logImpl ...

  6. 12. Java 获取指定字符第N次出现的位置

    import java.util.regex.Matcher; import java.util.regex.Pattern; public class Demo { //判断"Ab2Ad3 ...

  7. 物联网时代-新基建-ThingsBoard调试环境搭建

    前言 2020开年之际,科比不幸离世.疫情当道.经济受到了严重的损失.人们都不幸的感慨: 2020年真是太不真实的一年,可以重新来过就好了!国家和政府出台了拯救经济和加速建设的利好消息.3月份最热的词 ...

  8. python关于字典如何格式化地写入文件之中

    1.python关于字典如何式化地写入文件之中 如何写入:https://blog.csdn.net/qq_15642411/article/details/79943741 (推荐使用json包) ...

  9. 更新Linux服务器时间

    1.修改系统时区(不修改的话,你同步时间会发现总是不对) ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime --这里我修改为了上海 2.安 ...

  10. hdu3336 Counting the string kmp的next数组的应用

    题目链接:http://icpc.njust.edu.cn/Problem/Hdu/3336/ 题意就是要求一个字符串的所有前缀在字符串中出现的次数之和,我们容易想到kmp中的next数组,next[ ...