发表于: 2017-11-20 19:22:23
2 693
1;学习jmeter
概念术语: Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器, 等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言.
结论,就是用来测试性能的好用的免费的工具……
2;下载启动jmeter…这个就不多说了…有一点就是要以管理员的身份运行,不然启动窗口会警告
WARNING: Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002. Windows RegCreateKeyEx(...) returned error code 5.
大概意思是需要注册到注册表什么的,可以按照提示弄……不过比较麻烦,直接以管理员身份运行就行了……
然后是下载一个插件…TPS这个也比较简单,直接下载放到ext文件里就可以了
TPS;Transaction per Second ,每秒事务数,一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程
3;压测jsp先说一下参数的意义
Label:每个 JMeter 的 element(例如 HTTP Request)都有一个 Name 属性,这里显示的就是 Name 属性的值
#Samples:表示你这次测试中一共发出了多少个请求,如果模拟10个用户,每个用户迭代10次,那么这里显示100
Average:平均响应时间——默认情况下是单个 Request 的平均响应时间
Median:中位数,也就是 50% 用户的响应时间
90% Line:90% 用户的响应时间;这个详细说一下;这个90的意思是第90个;也就是说, 将一组数从小到大排列第90%个数,整个数组中90%的数都将小于该数;选取90%的线,那么所有的请求响应时间90%都是低于这个值;以此为衡量标准.
Min:最小响应时间 Max:最大响应时间
Error%:本次测试中出现错误的请求的数量/请求的总数
Throughput:吞吐量——默认情况下表示每秒完成的请求数(Request per Second)
KB/Sec:每秒从服务器端接收到的数据量
设置线程数以及设置过渡时期还有设置执行测试的次数;整体就是每个线程将完全独立地执行测试计划,完全独立于其他测试线程,而设置多个线程是用于模拟与服务器应用程序的并发连接.
4;具体压测信息
测试服务器性能是根据要求设立指标,简单了解了公司要求,错误率5%范围内, 90%Line的时间200ms这是最佳体验了;先找到最佳体验的最多并发数,具体步骤
建立线程组
上面说了参数的具体意义
然后添加聚合报告,以及tps事物数
填写好请求路径,这个样子
5;主要就看下线程数,也就是并发量;先不要看中间的时间间隔,循环次数也暂时关掉,直接开线程测最佳的线程数;以及崩溃的线程数;
循环16w次,90line的线是502ms;错误率0.09%;可以得出在不考虑时间间隔的情况下150线程是最佳
也简单测了一下,90line为200ms时的线程数为70;访问5w次,错误率0.14%
直接开1500线程…当场挂掉…..
试了几次,以5000ms或者错误率超过5%为崩溃界限;每次都错误率先到达极限%5,那就意味着可以直接先看错误率了,
700线程的时候,访问1w次就已经有接近%5的错误率了……
1000线程的时候,刚开始可以,随着访问量加大,直接崩溃……
6;这里详细分析一下上面只是单看线程数,不设置时间间隔的问题…实际上很不合理,先详细解释一下参数ramp-up period,就是用于告知JMeter 要在多长时间内建立全部的线程,默认值是0。假如未指定ramp-up period ,也就是说period 为零,那么JMeter 将立即建立所有线程,假设ramp-up period 设置成T 秒, 全部线程数设置成N个, JMeter 将每隔T/N秒建立一个线程。上面的测试都设置ramp-up成零,那么Jmeter将会在测试的开始就建立全部线程并立即发送访问请求,这样一来很轻易使服务器饱和,更重要的是会隐性地增加了负载,这就意味着服务器将可能过载,而且最重要的是这不是因为平均访问率高导致的过载;而是因为所有线程的第一次并发访问而引起的不正常的初始访问峰值;当然, 过大的ramp-up period 也是不恰当的,因为将会降低访问峰值的负载,直接假设设置过度期为一天,那么每一个线程启动间隔几个小时;那么在一些线程还未启动时,初期启动的部分线程就已经结束了,是没法建立并发的;
所以合理的压测是基于这个过渡期的时间选择;怎么选取这里就暂时放一下,涉及到jmeter的取样器点击率的知识………先暂时取5来测一下……
现在假设rmap的合理时间为5s,还要再详细计算一下参数数据,来模拟合理的并发数测试性能,再明确一下用到的参数:
线程数:n
Ramp-Up Period:T启动时间
循环次数:a
每个请求的平均时间t
前面说了,ramp的概念为过渡时间,也就是说T/n为每个线程的建立时间;那么当时间到S = (T- T/n)时,也就是最后一个线程启动,这个时候必须保证第一个线程还在运行中;这就要通过循环次数来延长单个线程的运行时间;增加一定界限的循环次数来保证当最后一个线程启动时,所有线程都在运行中,达到真正意义上的压测效果,实际很简单只需满足 a·t > S ,也就是第一个线程的运行时间恰好大于最后一个线程的启动时间……
理清了怎么合理设置参数,就来真正压测;首先明确已经有的参数,启动过度时间T假设合理为5s;每次平均响应时间t这里取100个线程循环1000一次的平均访问时间;
有图可以看出10w次的平均响应时间为准大约0.17s;因为线程数n正是我们要找到的最佳数,因为上面选的100线程测平均,这里也暂时保持一致100线程;
那么可以计算出循环次数a必须大于等于(4.95/0.17)次,否则不能保证第100个线程启动的时候,第一个线程还在运行;结果大约是29次,这里取100次来计算;
那么每一个线程运行时间R可以得出为17秒,也就是说第一个线程在时间点为17s的时候会停止,那么整个测试理论运行时间All则是 S + R也就是21.95s
这个时候的参数值,已经保证了100线程的可以同时运行了,这个时候可以看一下压测效果….
压测聚合值
再来增大循环看一下效果(这里就不修改相关参数了,用来对比没有启动时间的并发效果)
压测结果与正常的几乎变化不大,证明这个100线程的并发很稳定了
结论,值都比较合理,200ms左右的90line,%0的错误率;没什么好说的,这个时候再回去看之前的压测就很明显知道了,压测值不准确,因为没有启动时间,一开始就创建所有线程,导致最大访问的峰值一直保持最高,会导致服务器的过早的负载最大而崩溃,这样不能真正有效的模拟效果.
7;通过上面就可以看出,寻找最佳性能的线程并发方式,就是先根据一定的规则方式,来确定ramp period时间,然后先选取好实验值的线程数以及循环次数来得出平均访问时间;然后算出至少得循环次数……得出压测聚合效果;
这样来选取最佳的以及服务器崩溃的线程是比较麻烦的,因为每重新调整一次参数,就要重新测算平均时间;然后计算应该的循环次数;;;;原理差不多这个样……..
因为没有准确合理的ramp启动时间,计算出来的压测也仅仅是模糊的结果;不过知道怎么就算就好,这里也不在每次都测算了,虽然直接把循环次数改成永远,会造成比实际意义上的负载过大,不过也是简单参考吧……
上面假设5s的ramp启动时间假设为真,这里直接增加线程数,来获取最佳以及宕机时的线程数
最佳:测试结果;80个线程的并发数,90line是0.2s错误率0.12%
宕机的测试结果;450线程2w次就已经报错17%.....400线程没问题只是90line稍微高1000ms左右……
900线程的是一开始就17%
1500线程可以上来就是50%....再访问就爆炸…..
8;tps数据……
最佳的时候比较稳定吧…..都是请求成功的
差的时候会请求失败….
…..至于其他的关于吞吐量什么的计算公式就暂时不看了……..
9;学习memcache先说概念
MemCache是一个自由、源码开放、高性能、分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高了网站访问的速度。 MemCaChe是一个存储键值对的HashMap,在内存中对任意的数据(比如字符串、对象等)所使用的key-value存储,数据可以来自数据库调用、API调用,或者页面渲染的结果。MemCache设计理念就是小而强大,它简单的设计促进了快速部署、易于开发并解决面对大规模的数据缓存的许多难题,而所开放的API使得MemCache能用于Java、C/C++/C#、Perl、Python、PHP、Ruby等大部分流行的程序语言。
流程; 先检查客户端的请求数据是否在memcached中,有,直接把请求数据返回,不再对数据库进行任何操作;如果请求的数据不在memcached中,就去查数据库,把从数据库中获取的数据返回给客户端,同时把数据缓存一份到memcached中(memcached客户端不负责,需要程序明确实现);每次更新数据库的同时更新memcached中的数据,保证一致性;当分配给memcached内存空间用完之后,会使用LRU(Least Recently Used,最近最少使用)策略加上到期失效策略,失效数据首先被替换,然后再替换掉最近未使用的数据;
安装启动………
链接
明日计划的事情:
1;学习使用memcache
2;学习json
遇到的问题及解决方法:
问题就是进来什么都看不懂……图看不懂……表看不懂……概念看不懂….
解决办法….慢慢看……慢慢查……慢慢问……慢慢学….
收获:
1;初步接触了解压测相关知识概念
2;简单使用jmeter进行压测
评论