【Java分享客栈】未来迈向高级工程师绕不过的技能:JMeter压测
前言
因为工作需要,久违的从自己的有道云笔记中去寻找压测相关的内容,翻开之后发现还不错,温故一遍后顺便整理出来分享给大家。
题外话,工作8年多,有道云笔记不知不觉都6G多了,扫一眼下来尽是云烟过往,竟然还能发现Struts的东西,令人甚为感怀,挺好奇你们的云笔记长什么样子。
话说,我如果一直这么记下去,有朝一日能成为IT界的司马迁不哈哈?
为何JMeter
犹记得当年工作之初,压测根本不成为话题,当时的框架也相对复杂,和现在的SpringBoot用法简直云泥之别,在那种环境下,除了大公司,压测自然不是项目首要考虑的范畴。
但时过境迁,互联网井喷时代,信息爆炸式输出,大数据、云时代接踵而至,测试岗位的重要性逐步凸显,相应的压力测试、性能测试也成为项目绕不开的一环。
如果说一个Java程序员在迈向高级工程师必须要掌握主流的技能如SpringBoot、SpringCloud、MQ、k8S等等以外,还需要具备什么辅助技能,我可以很负责任的说,压测一定是未来挡在面前的一扇门。
为何这么讲,首先,并非所有的公司都有一定规模,都有自己的测试团队,或者测试人员都具备压测能力,反而有相当多的中小企业没有这些基础条件,但同时又承接了一定规模的项目,不要意外,这在关系网纵横交错的国内是很常见的事情。
我多年工作的经历告诉我,绝大部分程序员主要还是活跃在中小厂,这里面包含初级中级工程师,也包含因为各种原因从大厂下沉到中小厂的高级工程师,加上疫情造成市场下行压力变大的原因,我大胆判断未来的软件公司会走向碎片化,更小更精简的公司团队会承接更大更特殊的项目任务,这种现象会在之后一些年逐步显现。
那么,在这种团队中生存的程序员,如果未来要迈向高级工程师,压测就是必备的技能之一,只有测试阶段进行了反复的压测及优化,最终投入生产环境才会更安全可靠,这样的团队才会更被客户单位所认可。
这也是我专门出一篇JMeter压测相关文章的原因,尝试了好几个工具,还是觉得JMeter的实用性更强,压测结果也更可靠。
JMeter用法
安装其实挺简单,为了方便演示,我直接Windows上安装了,后面生产环境用法会讲Linux下安装,官网相关地址如下。
1)、官网:http://jmeter.apache.org/
1、安装
1)、下载
2)、解压
解压后在bin目录双击jmeter.bat打开,界面如下。
2、使用
1)、添加线程组
测试计划右键-添加-Threads(Users)-线程组
线程组配置看图片中红字说明
2)、HTTP请求默认值
线程组右键-添加-配置元件-HTTP请求默认值,设定一个默认的路径,之后就不用每个地方都重写一遍了。
3)、添加HTTP请求
线程组右键-添加-Sampler-HTTP请求,新建一个拿来压测的请求URL及参数。
这里参数给的是变量,变量名对应后面的配置文件,用${XXX}这样的形式写入。
目的是,模拟多个用户发出这个请求,即有多个user和多个token写入cookie,如:
userId1,userToken1
userId2,userToken2
userId3,userToken3
设置请求路径及变量如图所示
4)、模拟多用户请求
这里需要用到变量,线程组右键-添加-配置元件-CSV Data Set Config。
配置文件如下,自己设定一个id和token,在浏览器上F12查找一个拿来用。
或者使用程序生成几百几千个用户id,token,来模拟多用户访问。
5)、查看压测结果
执行压测后需要查看相关结果,线程组右键-添加-监听器-聚合报告,这里有很多包括表格、图表等等,一般就看聚合报告。
聚合报告如图所示,这里的Throughput属性就是指吞吐量,前面的Samples就是请求量。
含义:10000个请求的吞吐量是300-400之间,可以通俗理解为仅支持几百个并发(方便理解专业点一般不这么讲),很低,需要性能优化。
生产环境用法
1、安装
1)、将apache-jmeter-3.3.zip上传到Linux服务器上;
2)、unzip xx.zip进行解压;
3)、如果报了找不到unzip命令,就执行yum install -y unzip zip安装上就可以了。
2、新建压测文件
1)、新建一个压测文件:如user_list.jmx,设定线程组中线程数为5000,循环次数为10,表示执行50000次;
2)、将这个文件上传到Linux服务器上;
3)、具体新建压测文件jmx的方法参照前面的讲解。
3、执行压测
1)、同级目录下,执行命令:
./apache-jmeter-3.3/bin/jmeter.sh -n -t user_list.jmx -l result.jtl2)、启动jmeter进行压测,压测后的结果输出为result.jtl文件。
4、观测现象
在执行过程中,可以另开启一个窗口,执行top命令查看服务器承受的负载。(主要看红框这个,以及下面进程中的java相关的,会发现负载变得很大,CPU占用率也很高。)
5、导出结果
1)、将result.jtl下载到本地环境,然后在jmeter中的聚合报告那里,浏览打开,看结果;
2)、可以发现吞吐量很不理想,Linux服务器配置较低时,error很高,说明应用程序难以承受直接挂掉了。
6、压测建议
1)、压测不能依靠一次评判,一般第一次只是热身,以第二次第三次压测为准;
2)、不要在工作时间或运行高峰期时间进行压测,这是很危险的行为,最佳时期一定是测试阶段,少部分特殊情况只能在生产环境压测也一定要选择安全时段如凌晨;
3)、根据压测结果,进行性能优化后,可以再次像上述一样进行压测,然后导出聚合报告进行对比,直到达到理想结果。
总结
其实压测本身不难,压测的工具和方式也很多,比如redis有自己的压测工具redis-benchmark,还有Apache Benchmark简称ab,是Apache自带压测工具,这些用法都很简单。
压测是迈向高级工程师必会的技能之一,尤其是对核心业务接口的压测十分常用,正规的项目在测试阶段都需要压测,若公司有测试团队当然更好,但以java高级工程师为目标的话,压测技能你可以不会,但绝不能不了解。
分享
开篇说了,这是我8年多工作及学习过程中在云笔记中记录的内容之一,其实还有很多我闲暇之余都做了下整理,有感兴趣的朋友可以下载看看,什么时候用到了翻开说不定就能节省很多时间,下载地址会在评论中发出来。
本人原创文章纯手打,专注于分享主流技术及实际工作经验,觉得有一滴滴帮助的话就请点个赞和推荐吧!
【Java分享客栈】未来迈向高级工程师绕不过的技能:JMeter压测的更多相关文章
- 【Java分享客栈】一文搞定京东零售开源的AsyncTool,彻底解决异步编排问题。
一.前言 本章主要是承接上一篇讲CompletableFuture的文章,想了解的可以先去看看案例: https://juejin.cn/post/7091132240574283813 Comple ...
- 【Java分享客栈】我为什么极力推荐XXL-JOB作为中小厂的分布式任务调度平台
前言 大家好,我是福隆苑居士,今天给大家聊聊XXL-JOB的使用. XXL-JOB是本人呆过的三家公司都使用到的分布式任务调度平台,前两家都是服务于传统行业(某大型移动基地和某大型电网),现在 ...
- 【Java分享客栈】SpringBoot整合WebSocket+Stomp搭建群聊项目
前言 前两周经常有大学生小伙伴私信给我,问我可否有偿提供毕设帮助,我说暂时没有这个打算,因为工作实在太忙,现阶段无法投入到这样的领域内,其中有两个小伙伴又问到我websocket该怎么使用,想给自己的 ...
- 【Java分享客栈】一文搞定CompletableFuture并行处理,成倍缩短查询时间。
前言 工作中你可能会遇到很多这样的场景,一个接口,要从其他几个service调用查询方法,分别获取到需要的值之后再封装数据返回. 还可能在微服务中遇到类似的情况,某个服务的接口,要使用好几次f ...
- 【Java分享客栈】SpringBoot线程池参数搜一堆资料还是不会配,我花一天测试换你此生明白。
一.前言 首先说一句,如果比较忙顺路点进来的,可以先收藏,有时间或用到了再看也行: 我相信很多人会有一个困惑,这个困惑和我之前一样,就是线程池这个玩意儿,感觉很高大上,用起来很fashion, ...
- 【Java分享客栈】超简洁SpringBoot使用AOP统一日志管理-纯干货干到便秘
前言 请问今天您便秘了吗?程序员坐久了真的会便秘哦,如果偶然点进了这篇小干货,就麻烦您喝杯水然后去趟厕所一边用左手托起对准嘘嘘,一边用右手滑动手机看完本篇吧. 实现 本篇AOP统一日志管理写法来源于国 ...
- JMeter压测“java.net.BindException: Address already in use: connect”解决方法
之前在windows机上用JMeter压测,50并发下出现大量接口报“java.net.BindException: Address already in use: connect”错误. 从字面的意 ...
- jmeter压测过程中报java.lang.NoClassDefFoundError: org/bouncycastle/jce/provider/BouncyCastleProvider
由于在java中添加了第三方安全策略文件,具体请看https://www.cnblogs.com/mrjade/p/10886378.html,导致在用jmeter压测过程中会遇到以下错误 解决办法: ...
- 性能测试Jmeter压测ZooKeeper-自定义java请求
要想通过自定义java请求来压测ZooKeeper,那么我们就需要做两件事情,第一我们需要知道java如何操作ZooKeeper,第二就是怎么能将我们写的jar包让jmeter识别,首先我们先来干第 ...
随机推荐
- 学习Kvm(四)
安装KVM虚拟化 1.系统基础环境: [root@linux-node1 ~]# ip addr | grep inet | awk '{ print $2; }' | sed 's/\/.*$//' ...
- servlet中的ServletContext对象
ServletContext官方叫Servlet上下文.服务器会为每一个Web应用创建一个ServletContext对象.这个对象全局唯一,而且Web应用 中的所有Servlet都共享这个对象(在整 ...
- 6_稳定性_李雅普诺夫_Lyapunov
李雅普诺夫方法参考
- WordPress 网站开发“微信小程序“实战(二)
原文链接:https://devework.com/wordpres...,转载请用明链注明来源,谢谢! 本文是"WordPress 开发微信小程序"系列的第二篇,本文记录的是开发 ...
- Java/C++实现模板方法模式---数据库操作
对数据库的操作一般包括连接.打开.使用.关闭等步骤,在数据库操作模板类中我们定义了connDB().openDB().useDB().closeDB()四个方法分别对应这四个步骤.对于不同类型的数据库 ...
- java中接口interface可以持有多个类的共享常量
3.接口持有多个类的共享常量 接口另一主要功能,马克-to-win: 可以使用接口来引入多个类的共享常量.所有的这些变量名都将作为常量看待.所有定义在接口中的常量都默认为public.static和 ...
- java多线程的状态转换以及基本操作
1. 新建线程 一个java程序从main()方法开始执行,然后按照既定的代码逻辑执行,看似没有其他线程参与,但实际上java程序天生就是一个多线程程序,包含了:(1)分发处理发送给给JVM信号的线程 ...
- BootstrapBlazor实战 Chart 图表使用(1)
BootstrapBlazor组件 Chart 图表介绍 通过给定数据,绘画各种图表的组件 本文主要介绍三种图表使用:折线图,柱状图,饼图 1.新建工程 新建工程b06chart,使用 nuget.o ...
- C++五子棋(一)——开发环境
开发环境 环境准备 Visual Studio Windows EasyX图形库 素材文件 素材文件已经准备了,点击此处获取 百度网盘链接 提取码:su6p 创建项目 打开Visual Studio ...
- IO ——字节流
什么是流? 概念:内存与存储设备之间传输数据的通道.程序运行后保存在内存,文件一般在硬盘中,在程序中读写文件,需要在内存和存储设备中建立通道.数据借助流传输 流的分类: 按流向: 输入流:将存储设备中 ...