利用Jmeter工具对服务器,数据库进行性能监控,压测,导出性能测试报告

  Jmeter是Apache基金会旗下的一款免费,开源,轻量级的性能测试工具,主要针对web应用程序客户端/服务器进行性能测试.它可以分别测试静态、动态资源(Java Servlet,CGI Scripts,Java Object,数据库和FTP服务器等),它可以通过线程组来模拟数个用户,在一段时间内同时登录服务器,数个用户并发对数据库进行访问,从而测试出服务器,数据库在一定负载情况下的性能状况

  Jmeter是基于Java语言开发的,所以它的运行依赖于Jre环境,在运行之前首先要下载jdk(最好下载8,太低的话会导致无法启动).配置好环境变量后,下载Jmeter(下载地址 Apache JMeter - Download Apache JMeter ),截止发文前最高版本为5.4.3,我这里使用3.0演示.

Jmeter文件(下载地址(链接:https://pan.baidu.com/s/1Rr3ZQ8gaawBRPUctkuWBxw 
提取码:1304,有效期30天)(JMeterPlugins-Extras.jar,JMeterPlugins-Standard.jar这两个包是针对客户端安装的.ServerAgent-是针对服务器端的)


1. Jmeter本身并没有提供对服务器CPU,Memory,Disks I/O等进行监控的功能,所以我们通过它的插件来完成. 上面文件下载后,把JMeterPlugins-Extras.jar,JMeterPlugins-Standard.jar两个包放到Jmeter安装目录下的\lib\ext下,然后去bin目录下双击 jmeter.bat文件运行. 右击 测试计划>>Add>>Threads(Users),当发现有jp@gc-开头的选项时即表示插件安装成功

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Lic546L5Zyj56We6aOO,size_20,color_FFFFFF,t_70,g_se,x_16

 2. 右击 测试计划>>Add>>Threads(Users)>>Thread Group,添加线程组.右键 Thread group>>Add>>Sampler>>HTTP Request 添加Http请求,这里不设置参数值.而后 右键HTTP Request>>Add>>Listener>>jp@gc-PerfMon Metrics Collector.添加服务器端监控

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Lic546L5Zyj56We6aOO,size_20,color_FFFFFF,t_70,g_se,x_16

 3. 这样客户端就配置好了,接下来配置服务端,连接工具连接服务器,把ServerAgent-2.2.3.zip上传到服务器,解压,把压缩包删除.进入ServerAgent-2.2.3下, 用命令 chmod 777 startAgent.sh 赋予其全部权限. ./startAgent.sh 运行.出现以下提示,即代表运行成功.(ServerAgent默认使用4444端口)

13aca8a0f9ff4770acff0d53b400c61c.png

 如果出现  Can't accept UDP connections等错误提示, 可能是你的4444端口被占用了,用命令 lsof -i:4444检测, 如果有程序占用,用 kill -9 pid  把它杀掉,再启动就行了

5. 启动成功后,可以用windows的DOS命令连接检测一下,  telnet 服务器IP 4444

如果连接不成功,主要有两个原因,一是你的telnet客户端或者服务没有启动,具体启动方法百度.二是你服务器端的防火墙端口没有开启,开启方法自行百度.

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Lic546L5Zyj56We6aOO,size_20,color_FFFFFF,t_70,g_se,x_16

服务器端出现以下提示即代表连接成功

8da8d46aa4ed41a7a559b0e8f66241c2.png

 6. 连接成功后我们就可以在Jmeter上开始进行测试.点击 jp@gc-PerfMon Metrics Collector,在Servers Monitor中点击Add Row,添加服务器IP和端口号,Metric to collect下选择CPU/Memory/Disks I/O.然后设置线程组执行次数和循环次数,这里我设置执行1000次,循环10次,100秒内执行完

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Lic546L5Zyj56We6aOO,size_20,color_FFFFFF,t_70,g_se,x_16

 7. 点运行按钮,Chart中出现以下画面即代表监控成功

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Lic546L5Zyj56We6aOO,size_20,color_FFFFFF,t_70,g_se,x_16

 从画面中我们看出服务器CPU,内存,磁盘的运行状况,CPU和磁盘曲线在正常范围内波动,表示CPU、磁盘相对趋于稳定,内存曲线无波动一直处于一个稳定的值,表示内存也趋于稳定.

8 .这种监控一般配合web服务器来一起测试,访问web,监控服务器,这样才有实际的意义.我已经预装了Tomcat,这里我们以Tomcat为例来进行.首先保证tomcat能正常访问.然后在HTTP Request中添加以下参数.

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Lic546L5Zyj56We6aOO,size_20,color_FFFFFF,t_70,g_se,x_16

9. 点击运行,然后观察曲线变化

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Lic546L5Zyj56We6aOO,size_20,color_FFFFFF,t_70,g_se,x_16

 从图中我们看出各性能曲线都趋于正常,相对我们直接监控服务器CPU和磁盘更加稳定了.这是由于云服务器的保护机制,像云服务器的大型厂商,阿里、腾讯、华为,都针对各家的云服务器开发有保护技术,我这里监控的是阿里云服务器,当我再次运行后去服务端用 top命令观察cpu的状况,看到Java服务在首行,其次有一个AliyunDun的服务. 查阅官网得知,阿里云盾是针对阿里云服务器的一项保护技术,它可以过滤掉90%的异常访问包括一些DOS攻击,从而达到保护服务器的目的。


接下来我们测试数据库的性能(以mysql为例)

1. 这里我们着重于数据库的性能,不考虑网速的影响,所以我们采用本地的数据库(我安装的是Mysql8.0),打开Jmeter,添加线程组,右键 线程组>> Config Element >> JDBC Connection Configuration 添加JDBC配置, Variable Name处填写一个变量名 mysql (注意,自己起的名字要记住,后面要引用),在Database Connection Configuration处分别输入以下数据

fdf5686bc1314b13b956e537bae2891b.png

 Database URL是你的数据库连接地址,JDBC Driver class是加载的驱动类(如果你驱动包是5以上的版本,驱动类为com.mysql.cj.jdbc.Driver),Username是你的数据库用户名,Password是密码.

2. 右键线程组 >> Sampler >> JDBC Request 添加JDBC请求, Variable Name 后填写mysql(这里引用的是JDBC Connection Configuration中的Variable Name).Query Type 后选择 Select Statement,这里我们主要测试对数据库的查询,在实际开发中查询也是首要的测试点,Query下输入sql语句, 可以联查多张表.

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Lic546L5Zyj56We6aOO,size_20,color_FFFFFF,t_70,g_se,x_16

 3. 以上步骤完成后,对数据库的测试配置就完成了,最后添加察看结果树(View Results Tree),聚合报告(Aggregate Report)。在执行之前还需要把JDBC的连接jar包引入进来.点击测试计划,在最下面Add directory or jar to calsspath处点击 Browser,然后选择你本地的jar包 确定

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Lic546L5Zyj56We6aOO,size_20,color_FFFFFF,t_70,g_se,x_16

 4. 选择线程组,设置执行次数100,循环次数10,执行时间100秒.点击运行. 点击 Aggregate Report查看

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Lic546L5Zyj56We6aOO,size_20,color_FFFFFF,t_70,g_se,x_16

从上图看出,测试执行了1000次,平均响应时间2毫秒,无出错率,1秒内的吞吐量为10,趋于稳定.

各参数的解释如下 ,响应时间,出错率,吞吐量,最小响应,最大响应是测试的几个重要参数指标.

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Lic546L5Zyj56We6aOO,size_20,color_FFFFFF,t_70,g_se,x_16

5. 最后一步,导出聚合报告数据. 点击底部的 Save Table Data,选择存放位置,会导出一个.CSV的Excel文件.

a7f3c3779bc448e69f45cc3e6c1b53e3.png

除此之外还可以通过Jmeter的非GUI运行方式导出


至此,我们已完成了对服务器、数据库的压测,从而得出了测试数据.通过对测试数据的分析可以帮助我们在服务器配置参数和数据库参数配置方面进行调优,从而使其达到一个最佳的性能状态

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/761909.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Matlab使用教程(持续更新)

1. Matlab Matlab被广泛的应用在数据分析,汽车仿真,机器人以及医学研究等众多方面。 它可以帮助我们理解研究复杂的系统。 在60年代和70年代,计算机使得科学家和工程师完成了以前不可能进行的计算;但是需要懂得计算机编程。 C…

CMU 10-414/714: Deep Learning Systems --hw4

通过之前作业中完成的所有组件,使用高性能的网络结构来解决一些问题。首先会增加一些新的算子(使用CPU/CUDA后端),然后完成卷积、以及用一个卷积神经网络来在CIFAR-10图像数据集上训练一个分类器。接着需要完成循环神经网络(带LSTM),并在Penn Treebank数据集上完成字符级…

AI原生安全 亚信安全首个“人工智能安全实用手册”开放阅览

不断涌现的AI技术新应用和大模型技术革新,让我们感叹从没有像今天这样,离人工智能的未来如此之近。 追逐AI原生?企业组织基于并利用大模型技术探索和开发AI应用的无限可能,迎接生产与业务模式的全面的革新。 我们更应关心AI安全原…

【高频SQL题目进阶版】1440.计算布尔表达式的值

错误答案: 我一开始以为,既然都能拿到值了, 那么把它们合并起来就可以了。后来发现不行。。 1 concat concat(v1.value ,operator ,v2.value) 它不是一个条件,而只是一个字符串 。 而if (condition, true_value, false_value)…

从后端获取文件数据并导出

导出文件的公共方法 export const download (res, tools) > {const { message, hide } tools;const fileReader: any new FileReader();console.log(fileReader-res>>>, res);fileReader.onload (e) > {if (res?.data?.type application/json) {try {co…

docker方式进行pytorch多机多卡分布式训练

docker ip共享与gpu指定 1)ip共享 docker网络有多种,这里选择host直接用宿主机的ip 2)指定gpu docker方式进行pytorch多机多卡分布式训练 nvidia docker 容器介绍链接:https://docs.nvidia.com/deeplearning/frameworks/pytorch-release-notes/ docker用的nvidia官方镜像…

数字孪生与智慧城市:重塑城市生活的新模式

随着信息技术的迅猛发展,数字孪生作为一种新兴的技术理念,正在逐渐改变城市建设和管理的传统模式。智慧城市作为数字孪生技术应用的重要领域,正在以其独特的优势和潜力,重塑着城市生活的方方面面。本文将从数字孪生的概念、智慧城…

中文编程入门(Lua5.4.6中文版)第十一章 Lua 模块与包 参考星争际霸游戏

在遥远的星争际霸世界中,代码模块就如同星际基地中的高科技仓库,储存着各类经过封装优化的战术指令和战略资源。自Lua 5.1版本起,星际编程者们引入了标准化的模块管理系统,使得不同战舰之间能够共享和调用核心战斗算法&#xff0c…

StarRocks学习笔记

介绍场景建表明细模型聚合模型更新模型主键模型 介绍 StarRocks是一款经过业界检验、现代化,面向多种数据分析场景的、兼容MySQL协议的、高性能分布式关系型分析数据库。 StarRocks充分吸收关系型 OLAP 数据库和分布式存储系统在大数据时代的优秀研究成果&#xff…

算法体系-14 第十四 贪心算法(上)

一 、 递归套路解决判断完全二叉树 1.1 描述 1.2 分析 1.3 代码 public static boolean isCBT2(Node head) {return process(head).isCBT;}public static class Info {public boolean isFull;public boolean isCBT;public int height;public Info(boolean full, boolean cbt…

UI自动测试框架-selenium(1) selenium介绍和选择器

目录 1.selenium是什么 2.定位元素 2.1 css选择器 2.1.1 选择id 2.1.2 class 2.1.3使用标签选择 2.1.4父类选择器 子类选择器 2.2 xpath 1.selenium是什么 selenium是用来做web端自动化测试的框架,它支持各种游览器,各种平台,支持各种语言(如 Python,Java,C#,JS,Ruby..…

[flask]flask的路由

路由的基本定义 路由就是一种映射关系。是绑定应用程序(视图)和url地址的一种一对一的映射关系!在开发过程中,编写项目时所使用的路由往往是指代了框架/项目中用于完成路由功能的类,这个类一般就是路由类,…

全国产飞腾+FPGA架构,支持B码+12网口+多串电力通讯管理机解决方案

行业痛点: 中国的电力网络已经成为当今世界覆盖范围最广、结构最为复杂的人造科技系统。随着国家和各部委颁布了一系列法律法规,如国家颁布的《中华人民共和国网络安全法》、工信部颁布的《工业控制系统信息安全防护指南》、发改委颁布的14号令《电力监控系统安全防…

基于微信小程序的电影票务系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式 🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 &…

python智慧农业小程序flask-django-php-nodejs

当今社会已经步入了科学技术进步和经济社会快速发展的新时期,国际信息和学术交流也不断加强,计算机技术对经济社会发展和人民生活改善的影响也日益突出,人类的生存和思考方式也产生了变化。传统智慧农业采取了人工的管理方法,但这…

python自定义日历库,与对应calendar库函数功能基本一致

目录 自定义日历库 常用列表 日期列表 常用函数 闰年判断 月份天数 元旦序号 日历表头 星期序号 序号及天数 月历字串 打印月历 年历字串 打印年历 对比测试 测试结果 完整代码 运行结果 自定义日历库 自定义日历库函数,并使得其与python calend…

国际期货英文版配资系统/VUE源码包搭建

要搭建一个国际期货英文版配资系统的Vue源码包,你需要遵循一系列的开发步骤。这涉及到前端和后端的开发,以及确保系统的安全性、稳定性和可扩展性。以下是一个大致的指南,帮助你开始这个项目: 1. 需求分析 用户角色与权限&#…

【SpringBoot】登录校验之会话技术、统一拦截技术

真正的登录功能应该是: 登陆后才能访问后端系统页面,不登陆则跳转登陆页面进行登陆。 当我们没有设置登录校验,可以直接通过修改地址栏直接进入管理系统内部,跳过登录页。而后端系统的增删改查功能,没有添加判断用户是…

DECO: Query-Based End-to-End Object Detection with ConvNets 学习笔记

论文地址:https://arxiv.org/pdf/2312.13735.pdf源码地址:https://github.com/xinghaochen/DECO 近年来,Detection Transformer (DETR) 及其变体在准确检测目标方面显示出巨大的潜力。对象查询机制使DETR系列能够直接获…

[pytorch] detr源码浅析

[pytorch] detr源码浅析 1. backbone部分2. encoder部分3. decoder部分4. 输出预测 为之后SAM的代码分析做铺垫 1. backbone部分 detr.py中的DETR class class DETR(nn.Module):def __init__(self, backbone, transformer, num_classes, num_queries, aux_lossFalse):...def …