JMeter压力测试和性能优化
文章目录
- 一、性能指标
- 二、JMeter 的使用
- 三、 性能监控
- 3.1 监控堆内存
- 3.2 JConsole
- 3.3 JVisualVM
- 四、性能优化
压力测试考察当前软硬件环境下系统所能承受的最大负荷并帮助找出系统瓶颈所在。压测都是为了系统在线上的处理能力和稳定性维持在一个标准范围内,做到心中有数。
使用压力测试,我们有希望找到很多种用其他测试方法更难发现的错误。有两种错误类型是:内存泄漏,并发与同步。
有效的压力测试系统将应用以下这些关键条件:重复,并发,量级,随机变化。
一、性能指标
指标 | 说明 |
---|---|
响应时间(Response Time: RT) | 响应时间指用户从客户端发起一个请求开始,到客户端接收到从服务器端返回的响应结束,整个过程所耗费的时间。 |
HPS (Hits Per Second) | 每秒点击次数,单位是次/秒。 |
TPS (Transaction per Second) | 系统每秒处理交易数,单位是笔/秒。 |
Qps (Query per Second) | 系统每秒处理查询次数,单位是次/秒。 |
最大响应时间(Max Response Time) | 指用户发出请求或者指令到系统做出反应(响应)的最大时间。 |
最少响应时间(Mininum ResponseTime) | 指用户发出请求或者指令到系统做出反应(响应)的最少时间。 |
90%响应时间(90% Response Time) | 指所有用户的响应时间进行排序,第90%的响应时间。 |
对于互联网业务中,如果某些业务有且仅有一个请求连接,那么TPS
=QPS
=HPS
,一般情况下用TPS
来衡量整个业务流程,用QPS
来衡量接口查询次数,用HPS
来表示对服务器单击请求。
无论TPS
、QPS
、HPS
,此指标是衡量系统处理能力非常重要的指标,越大越好,根据经验,一般情况下:
- 金融行业:1000
TPS
~5000OTPS
,不包括互联网化的活动 - 保险行业:100
TPS
~100000TPS
,不包括互联网化的活动 - 制造行业:10
TPS
~5000TPS
- 互联网电子商务:10000
TPS
~1000000TPS
- 互联网中型网站:1000
TPS
~50000TPS
- 互联网小型网站:500
TPS
~10000TPS
从外部看,性能测试主要关注如下三个指标:
- 吞吐量:每秒钟系统能够处理的请求数、任务数;
- 响应时间:服务处理一个请求或一个任务的耗时;
- 错误率:一批请求中结果出错的请求所占比例。
二、JMeter 的使用
添加一个线程组 -> 添加一个HTTP
请求 -> 添加如下3个监听器
启动请求,查看监听器返回:
三、 性能监控
3.1 监控堆内存
JVM
基础:https://blog.csdn.net/qq_38697437/article/details/114443726
GC
:https://blog.csdn.net/qq_38697437/article/details/114583508
服务器性能诊断和CPU
占用过高处理:https://blog.csdn.net/qq_38697437/article/details/114691232
3.2 JConsole
CMD
输入jsonsole
即进入JConsole
,选择进程进入监控:
选择内存这边我们可以具体监控到堆内存某个位置:
JConsole
远程连接容器启动条件:
-Djava.rmi.server.hostname=10.104.28.50 -Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=39360 -Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.rmi.port=39360
3.3 JVisualVM
JVisualVM相当于升级版的JConsole,可用于监控内存泄露,跟踪垃圾回收,执行时内存,cpu分析,线程分析…
CMD
输入jvisualvm
即进入JConsole
,选择进程进入监控:
这里我们可以看到各个线程的具体运行状态:
- 运行:正在运行
- 休眠:
sleep
- 等待:
wait
- 驻留:线程池里面的空闲线程
- 监视:阻塞的线程,正在等待锁
工具 -> 插件,可以下载我们需要的插件:
下载GC
插件后我们可以看到更为直观的GC
监控:
四、性能优化
影响性能考虑点包括: 数据库、座用程序、中间件(tomact、Nginx)、网络和操作系统等方面首先考虑自己的应用属于CPU密集型还是IO密集型
- 使用
JVisualVM
对中间件和项目进行CPU
和内存的监控 - 使用
Jemter
对中间件和项目进行压力测试,压力测试表如下(数据来源于网络):
压测内容 | 压测线程数 | 吞吐量/s | 90%响应时间 | 99%响应时间 |
---|---|---|---|---|
Nginx | 50 | 9501 | 3 | 149 |
Gateway | 50 | 24366 | 3 | 6 |
简单服务 | 50 | 40574 | 2 | 6 |
首页一级菜单渲染 | 50 | 1294(db,thymeleaf) | 63 | 114 |
首页渲染(开缓存) | 50 | 1997 | 30 | 58 |
首页渲染(开缓存,优化数据库,关日志) | 50 | 2617 | 23 | 37 |
三级分类数据获取 | 50 | 22(db)/31(开缓存,优化数据库关日志后) | 2355 | 2848 |
三级分类(优化业务) | 50 | 316 | 269 | 435 |
三级分类(使用redis作为缓存) | 50 | 1942 | 34 | 52 |
首页全部数据获取 | 50 | 34(静态资源) | ||
Nginx+Gateway | 50 | |||
Gateway+简单服务 | 50 | 10313 | 9 | 20 |
全链路 | 50 | 2129 | 9 | 20 |
通过压力测试表我们可以看出
- 中间件越多,性能损失越大,大多都损失到网络交互了;
- 我们可以对
DB
相关进行优化; - 模板的渲染速度和
cpu
和内存有关,开启thymeleaf
缓存; - 使用
Nginx
动静分离也能提高吞吐量; - 业务使用缓存能够大大地的提高性能。
JMeter压力测试和性能优化相关推荐
- Jmeter压力测试和性能调优
1.压力测试的概念 压力测试是模拟实际应用的软硬件环境及用户使用过程的系统负荷,长时间或超大负荷地运行测试软件,来测试被测系统的性能.可靠性.稳定性等 2.压力测试的目的 1)给出系统当前的性能状况 ...
- Apache Jmeter压力测试与性能监控,监测cpu、内存、磁盘、网络
1.官网下载Jmeter 解压,bin目录下 Windows 运行jmeter.bat .Linux运行jmeter.sh 2.jmeter-plugins-manager 插件 测试机下载放置Jme ...
- jmeter压力测试动态修改并发参数
Apache JMeter 是 Apache 旗下的开源压测工具,创建于 1999 年初,迄今已有超过 20 年历史.JMeter 功能丰富,社区(用户群体)庞大,是主流开源压测工具之一. 性能测试通 ...
- JMeter压力测试与JVM监控以及调优
一.性能指标 -★ 响应时间(Response Time: RT) 响应时间指用户从客户端发起一个请求开始,到客户端接收到从服务器端返回的响 应结束,整个过程所耗费的时间. HPS(Hits Per ...
- jmeter压力测试linux,JMeter压力测试
JMeter压力测试 整体目标: 安装虚拟机,并安装一套LAMP(Linux+Apache+Mysql+PHP)待测系统,推荐ECShop(http://www.ecshop.com),基于此进行Jm ...
- 性能测试连载 (7)-jmeter 压力测试中的难点解析
概述 新人在用jmeter做压力测试的时候,会被一些性能术语搞懵,直接导致的后果就是对测试出来的结果数据根本不能理解,更谈不上分析.这篇文章着重给大家实例解释一下jmeter压力测试的一些专有名词 问 ...
- JMeter压力测试,mongodb教程视频百度云
2.httpclient4:压测时,每请求一次都创建一个新的链接,(jmeter5.0以前默认关闭了连接复用,5.0上是打开的:即每请求一次都会创建一个新的链接). 从JMeter 5.0开始,当使用 ...
- Apache JMeter压力测试快速入门
引言 前文<Apache JMeter功能测试快速入门>中,我们在bin目录下点击jmeter.bat启动JMeter时,目光如炬的你一定注意到了命令行窗口中的如下提示: Don't us ...
- JMeter压力测试,五年Java开发者小米、阿里面经
下载地址:jmeter-plugins.org 安装:下载后文件为plugins-manager.jar格式,将其放入jmeter安装目录下的lib/ext目录,然后重启jmeter,即可. 启动je ...
- 接口测试工具-Jmeter压力测试使用
接口测试工具-Jmeter压力测试使用 官方描述:jmeter是apache公司基于java开发的一款开源压力测试工具,体积小,功能全,使用方便,是一个比较轻量级的测试工具,使用起来非常简单.因为jm ...
最新文章
- 再见了,Python!!
- mysql 连接url中useUnicode=truecharacterEncoding=UTF-8 的作用
- centos 6.7下安装rabbitmq 3.6.6过程
- spring autoproxy by annotation
- 用了这个评估优化LiteOS镜像利器,我有点飘...
- MATLAB-S函数
- 工程图样中粗实线的用途_电气工程图的一般特点、设计规范
- web大作业:简单的学生网页作业源码 基于html css javascript jquery实现智能分控网站
- python矩阵连乘_第3章 动态规划——矩阵连乘最优计算方式查找
- MTK平台 后视镜系列 声控参数调整方法
- If-Modified-Since HTTP 304 和 ETag
- 华硕ASUS FZ63VD fn快捷键失灵
- 强烈分享两个功能强大,可以极大提高工作效率的软件
- 嵩天python爬虫百度云盘_基于MOOC嵩天《Python网络爬虫与信息提取》视频学习记录——第一周:requests库...
- iOS TCP UDP通信
- pvsyst 7.1使用教程
- matlab的gccphat转C语言,Python中的GCCPHAT互相关
- 奥维没有了gg地图后,正确的打开方式
- Python学习-批量提取图片名称保存至txt文件
- 配电室环境远程监控物联网方案
热门文章
- [root@py ~]# watch -n 1 ifconfig 求解释
- hdu 1540 Tunnel Warfare (线段树维护左右最长连续区间)
- 编程珠玑Column11中插入排序和快排序
- Oracle数据库游标使用大全
- chown –r mysql:mysql_Linux服务器部署系列之二—MySQL篇
- 浅拷贝直接赋值_Python里面如何拷贝一个对象?(赋值,浅拷贝,深拷贝的区别)?...
- session同步问题
- php resultful接口,来自REST ful PHP服务器的完整日历事件
- MFC获取指针.doc
- Qt_ERRO Rundefined reference to `vtable for XXX'