发表于: 2021-09-12 18:18:01
1 1141
一,今天完成的事情
任务六。
1,
1)任务六是要求做压力测试。使用软件要求是JMeter。要求被测试的对象是JSP(可选压测JSP和Json接口)。特别提醒要看TPS数据(Transaction per Second)。
2)JMeter要求调整并发数,我的理解就是超过1个线程超过3位数。可能要测到程序不能运行为止。我会测试到程序不能运行,或者线程再提高数据差不多为止。记录好这次的数据。
3)在2)中加入Memcached,记录测试数据。特别要求测出90%的线在哪里。
4)部署两台WEB,使用Nginx的Upstream来做负载。这个要求是在2)的基础上加。之前停止Memcached进程,我理解就是不带Memcached。
5)在2)中加入Redis,记录测试数据。
验收标准直接看
验收标准
--1.模拟访问数据,最好数据会有一些变化
--2.模拟数据穿透缓存的情况
--3.性能报告要包括:A.系统当机时的负载 B。TPS稳定时的响应时长 C.系统可以在500MS返回时的TPS
--4.Java的每个任务总结,必须给出性能压测报告,要求预估每一行代码的执行时间,结合数量做评估.
2,所以总结,这次的报告是使用为主。JMeter,Memcached,Redis,Nginx的Upstream,至少2台web服务器。
以前我在我的云Linux上部署过Resin,Jetty,Tomcat 3个web应用服务器了,所以这次
我在过往项目中,只有四五统一代码的项目的最终代码用了JSP。项目一没有页面,根本没有controller。项目二三是用流行的给前端返回json格式,前端渲染。所以就用我的项目四五代码测试。测试不需要登录的那个页面为主。
Resin,Jetty,Tomcat 我在本地也部署了,因为先本地测试成功,本地方便。然后在Linux上又把Resin,Jetty,Tomcat 都安装,Linux安装很类似。所以我会把这次的JMeter,Memcached,Redis在本地先测试好,再在云linux上再次验证运行。
Nginx的Upstream来做负载2台,就在云Linux设置 负载/压力 测试。
3,我在说Jmeter的测试配置,还有我希望介绍的参数之前,如果希望Memcached,Redis逻辑没问题,先看它们两个安装好后使用的一些demo,知道它们有的数据结构。
1)Memcached,Redis一般认为它们的作用是缓存。高性能分布式内存缓存服务:内存,分布式,是缓存。但是他们其实是数据库。是数据库就有增删改查。需要用的时候再去查有什么具体方法,也可以。
Memcached 看菜鸟https://www.runoob.com/memcached/memcached-set-data.html 从set类型看到统计类的命令,够做这次的项目。Memcached就认为它只支持
key-value的存储。
2)Redis ( Remote DIctionary Server ) 通常被称为数据结构服务器,因为值 ( value ) 可以是字符串 ( String ) , 哈希 ( Map ) , 列表 ( list ) , 集合 ( Sets ) 或有序集合 ( Sorted Sets ) 等类型。------所以Redis利用了多种数据结构,有5种不同类型的值。
有一个Redis Cluster的概念。这个任务不用用。能够增删改查5种不同类型的值,逻辑没有问题就可以。redis中文官方网站有一个“Redis命令大全”,查看这些命令。http://www.redis.cn/commands.html 。可以过滤命令组。
最常用的Redis命令采用菜鸟的例子了解足够,从key看到sorted set。比官方网站更缩减。
4,我查询JMeter,挑选自己觉得有代表性的教程使用
jdk8已经有
http://jmeter.apache.org/download_jmeter.cgi ,还是有Binaries,Source区别。
windows下下载zip,不是SHA512版本。然后就是windows安装全家桶。
本地windows配置JMETER_HOME。
(1)我的是C:\apache-jmeter-5.4.1。
(2) 不一定需要设置,请看设置CLASSPATH和不设置的区别。在CLASSPATH变量的最前面加入如下变量: %JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar;
(3)在PATH变量的最前面加入如下变量:%JMETER_HOME%\bin;
进入bin,双击jmeter.bat 。就能启动了。
初次见
可以装作很多的客户端,去测试服务器了。
添加线程组成功
右边可以设置线程组主要参数,一定要看这部分功能
线程组主要包含三个参数:线程数、准备时长(Ramp-Up Period(in seconds))、循环次数。
线程数:虚拟用户数。一个虚拟用户占用一个进程或线程。设置多少虚拟用户数在这里也就是设置多少个线程数。
准备时长: 设置的虚拟用户数需要多长时间全部启动。如果线程数为20 ,准备时长为10 ,那么需要10秒钟启动20个线程。也就是每秒钟启动2个线程。
循环次数:每个线程发送请求的次数。如果线程数为20 ,循环次数为100 ,那么每个线程发送100次请求。总请求数为20*100=2000 。如果勾选了“永远”,那么所有线程会一直发送请求,一直到选择停止运行脚本。
在上图的thread group右键,为了添加HTTP请求。这个图示是“取样器”。
右边又可以设置HTTP参数
看了况师兄的日报,他有一个问题提出的比较有效。有关keepalive在JMeter默认勾选可能导致的错误:不会等待,一旦连接空闲,则立马断开了,导致压测中出现事务失败。
这里是在basic。然后选择Advanced选项。解决:修改httpclient4.idletimeout=<time in ms> 设置成自己觉得合理的时间,一般可设置成10-60s(表示连接空闲10s后才会断开),注意这边单位是ms。修改完成后再次压测,错误不再有了
在intellij启动服务器。然后在JMeter填入一定要填的内容。填对访问的地址,就能访问到我的jsp页面,达到测试jsp的目的。
我第一次设置的数很小,主要是先看是否有问题。隔离问题去测试。
单击保存。点绿色箭头开始测试。
下拉状态表示,可以正常运行测试
分为start,done,finish
添加监听器常用组件。根据自己需要增加,才能查看结果。注意是在thread group上添加。
加上监听器后,我先测试1000,然后测试10。结果同样的包,10都是code 200,1000个都是失败。看结果树。这个页面在任务4给过设计,需要读取的地方不少,所以1000在本地mysql就不行了不奇怪。
clear,甚至删除Listener,再添加,发现10个并发访问轻松
100个5秒启动
这个全部没错误,也轻松
100个1秒启动也轻松。TPS接近60个还可以。
200,1s
500,1s
1000,1s
出错是正常的
1000,1s错误率明显提升。以后就看缓存,Memcache和Redis的增强能力了
二,今天问题
测试,高并发
三,今天的收获
我用Redis比较多,Memcached少。Redis的数据结构的先后喜欢说“栈”的概念。
Jmeter是测试常用开源软件,学习它的使用方式,也学习它的思想。
四,明天的计划
任务6
评论