阅读 276

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

  • 运行:正在运行的线程

  • 休眠:sleep

  • 等待:wait

  • 驻留:线程池里面的空闲线程

  • 监视:阻塞的线程,正在等待锁

安装插件查看GC

  • cmd启动jvisualvm

  • 工具->插件,在可用插件中选择Visual GC下载安装,重启jvisualvm,即可实时查看到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:ThreadStackSizeThread 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:SurvivorRatioEden区与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的存活时间1ssoftly 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:TLABWasteTargetPercentTLAB占eden区的百分比1%
-XX:+CollectGen0FirstFullGC时是否先YGCfalse

来源https://www.cnblogs.com/bGpi/p/14731808.html

文章分类
后端
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐