jvm调优与jmeter 性能测试

JVM调优

参考:
深入浅出JVM调优,看完你就懂
调优参数与说明
JVM调优总结

参数 含义 默认值 描述
-Xms 初始堆大小 内存的1/64 默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制
-Xmx 最大堆大小 内存的1/4 默认(MaxHeapFreeRatio参数可以调整)空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制
-Xmn 年轻代大小 注意:此处的大小是(eden+ 2 survivor space).与jmap -heap中显示的New gen是不同的。 整个堆大小=年轻代大小 + 年老代大小 + 持久代大小. 增大年轻代后,将会减小年老代大小.此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8

配置参数:

 //设置堆初始值
 指令1:-Xms2g
 指令2:-XX:InitialHeapSize=2048m
 ​
 //设置堆区最大值
 指令1:`-Xmx2g` 
 指令2: -XX:MaxHeapSize=2048m
 ​
 //新生代内存配置
 指令1:-Xmn512m
 指令2:-XX:MaxNewSize=512m

查看GC指令

jstat -gc PID 

jdk工具:
在这里插入图片描述

实际应用:
在这里插入图片描述

列举性能测试常见问题

性能测试结果中,我们关注的指标是tps和art(当然,也会关注各个服务器的各种资源情况),如果tps低,或者响应时间长,或者服务器资源紧张,那就需要我们去定位性能问题了

常见的性能问题(有些只是表象,需要深层次定位):
  a.服务器
    cpu:us & sy
    内存:使用率及交换率
    磁盘io:读写慢
    磁盘容量
  b.网络带宽:看当前收、发速度及有没有丢包、端口使用情况
  c.cpu高:看线程信息;是否fgc等
  d.队列问题(负载高):磁盘io队列(物理读高);线程队列(线程阻塞、锁竞争)
  e.各种连接池问题:不足、未释放
  f.死锁问题:线程死锁、数据库死锁
  g.sql问题:索引(未加、使用不当)、慢sql(全表扫描、循环插入 or 更新、查询结果未分页展示、sql逻辑)、长事务
  h.应用log级别:设置不正确
  i.缓存设置问题、没有利用好缓存
    j.缺乏消息中间件
    k.代码:业务逻辑代码冗余、遍历Map

性能测试:TPS和QPS的区别

TPS: Transactions Per Second,意思是每秒事务数,具体事务的定义,都是人为的,可以一个接口、多个接口、一个业务流程等等。一个事务是指事务内第一个请求发送到接收到最后一个请求的响应的过程,以此来计算使用的时间和完成的事务个数。

以单接口定义为事务为例,每个事务包括了如下3个过程:

  1. 向服务器发请求
  2. 服务器自己的内部处理(包含应用服务器、数据库服务器等)
  3. 服务器返回结果给客户端

如果每秒能够完成N次这三个过程,tps就是N;
如果多个接口定义为一个事务,那么,会重复执行abc,完成一次这几个请求,算做一个tps。

QPS: Queries Per Second,意思是每秒查询率,是一台服务器每秒能够响应的查询次数(数据库中的每秒执行查询sql的次数),显然,这个不够全面,不能描述增删改,所以,不建议用qps来作为系统性能指标。

tps, qps区别

如果是对一个查询接口(单场景)压测,且这个接口内部不会再去请求其它接口,那么tps=qps,否则,tps≠qps

如果是容量场景,假设n个接口都是查询接口,且这个接口内部不会再去请求其它接口,qps=n*tps

jmeter聚合报告中,Throughput是用来衡量请求的吞吐量,也就是tps,tps=样本数/运行时间;我们定义的是tps,不是qps

如果没有定义事务,会把每个请求作为一个事务
在这里插入图片描述

JMETER

用jmeter参数化进行批量测试(接口测试)

https://blog.csdn.net/weixin_34255055/article/details/91504414

接口压测样例:
https://www.cnblogs.com/Owen-ET/p/14229778.html

猜你喜欢

转载自blog.csdn.net/u014438244/article/details/121162899