其他分享
首页 > 其他分享> > JMeter压力测试

JMeter压力测试

作者:互联网

性能指标

1、响应时间(Response Time:RT)

响应时间指用户从客户端发起一个请求开始,倒客户端接收倒从服务器端返回的响应结束,整个过程所耗费的时间。

2、HPS(Hits per Second)

每秒点击次数,单位是次/秒。

3、TPS(Transaction per Second)

每秒处理的交易数。单位是笔/秒。

4、QPS(Query per Second)

系统每秒处理查询次数,单位是次/秒。

5、最大响应时间

指用户发出请求或者指令到系统做出响应的最大时间。

6、最少响应时间

指用户发出请求或者指令到系统做出响应的最少时间。

7、90%响应时间

是指所有用户的响应时间进行排序,第90%的响应时间

8、关注指标

从外部看,性能测试主要关注如下三个指标“

JMeter

安装

官网下载最新压缩包,在本地解压,打开bin目录下的ApacheJMeter.jar运行即可。

压测实例

1、添加线程组

image-20210504203938835

2、添加HTTP请求

image-20210504204140499

3、添加监听器

image-20210504204212247

如上图,可根据需要添加不同的监听器,在测试过程中监听器会将测试的结果进行记录呈现,一般添加察看结果树、汇总报告、聚合报告即可。

4、启动压测&查看分析

image-20210504204404771

点击启动,即可等待测试完成,查看测试报告,如www.baidu.com的测试结果为:

image-20210504204510720

性能监控

jvisualvm

用途

监控内存泄漏,跟踪垃圾回收,执行时内存、cpu分析、线程分析等。

监控的线程各个状态:

image-20210504221407386

安装插件查看GC

image-20210504222553397

优化

影响性能考虑点包括:数据库、应用程序、中间件(tomacat、nginx)、网络和操作系统等方面。要优化性能,需要首先考虑自己的应用属于CPU密集型还是IO密集型

动静分离

动静分离是一种高效的性能优化方案,即将页面的静态文件(如js文件、css文件、图片资源等)和动态请求进行分离,有nginx直接返回静态文件请求而不用经过业务服务器,业务服务器只处理动态请求,从而提高并发。步骤为:

  1. 将所有静态文件放在nginx安装目录下的html文件夹下。
  2. 配置转发条件
#将所有路径带static的文件(即静态文件)都由nginx直接返回
location /static/ {
	root   /usr/share/nginx/html;
}

JVM参数配置

可以通过观察GC的情况合理调整我们项目的内存分配,jvm的参数含义为:

参数名称 含义 默认值
-Xms 初始堆大小 物理内存的1/64(<1GB) 默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制.
-Xmx 最大堆大小 物理内存的1/4(<1GB) 默认(MaxHeapFreeRatio参数可以调整)空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制
-Xmn 年轻代大小(1.4or lator) 注意:此处的大小是(eden+ 2 survivor space).与jmap -heap中显示的New gen是不同的。 整个堆大小=年轻代大小 + 年老代大小 + 持久代大小. 增大年轻代后,将会减小年老代大小.此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8
-XX:NewSize 设置年轻代大小(for 1.3/1.4)
-XX:MaxNewSize 年轻代最大值(for 1.3/1.4)
-XX:PermSize 设置持久代(perm gen)初始值 物理内存的1/64
-XX:MaxPermSize 设置持久代最大值 物理内存的1/4
-Xss 每个线程的堆栈大小 JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K.更具应用的线程所需内存大小进行 调整.在相同物理内存下,减小这个值能生成更多的线程.但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右 一般小的应用, 如果栈不是很深, 应该是128k够用的 大的应用建议使用256k。这个选项对性能影响比较大,需要严格的测试。(校长) 和threadstacksize选项解释很类似,官方文档似乎没有解释,在论坛中有这样一句话:"” -Xss is translated in a VM flag named ThreadStackSize” 一般设置这个值就可以了。
-XX:ThreadStackSize Thread Stack Size (0 means use default stack size) [Sparc: 512; Solaris x86: 320 (was 256 prior in 5.0 and earlier); Sparc 64 bit: 1024; Linux amd64: 1024 (was 0 in 5.0 and earlier); all others 0.]
-XX:NewRatio 年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代) -XX:NewRatio=4表示年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5 Xms=Xmx并且设置了Xmn的情况下,该参数不需要进行设置。
-XX:SurvivorRatio Eden区与Survivor区的大小比值 设置为8,则两个Survivor区与一个Eden区的比值为2:8,一个Survivor区占整个年轻代的1/10
-XX:LargePageSizeInBytes 内存页的大小不可设置过大, 会影响Perm的大小 =128m
-XX:+UseFastAccessorMethods 原始类型的快速优化
-XX:+DisableExplicitGC 关闭System.gc() 这个参数需要严格的测试
-XX:MaxTenuringThreshold 垃圾最大年龄 如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代. 对于年老代比较多的应用,可以提高效率.如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活 时间,增加在年轻代即被回收的概率 该参数只有在串行GC时才有效.
-XX:+AggressiveOpts 加快编译
-XX:+UseBiasedLocking 锁机制的性能改善
-Xnoclassgc 禁用垃圾回收
-XX:SoftRefLRUPolicyMSPerMB 每兆堆空闲空间中SoftReference的存活时间 1s softly reachable objects will remain alive for some amount of time after the last time they were referenced. The default value is one second of lifetime per free megabyte in the heap
-XX:PretenureSizeThreshold 对象超过多大是直接在旧生代分配 0 单位字节 新生代采用Parallel Scavenge GC时无效 另一种直接在旧生代分配的情况是大的数组对象,且数组中无外部引用对象.
-XX:TLABWasteTargetPercent TLAB占eden区的百分比 1%
-XX:+CollectGen0First FullGC时是否先YGC false

标签:年轻,响应,大小,XX,线程,内存,测试,压力,JMeter
来源: https://www.cnblogs.com/bGpi/p/14731808.html