发表于: 2021-09-12 18:18:01

1 784


一,今天完成的事情

任务六。


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




返回列表 返回列表
评论

    分享到