zoukankan      html  css  js  c++  java
  • Jmeter 分布式架构和服务器性能监控解决方案

    在对项目做大并发性能测试时,常会碰到并发数比较大(比如需要支持10000并发),单台电脑的配置(CPU和内存)可能无法支持,这时可以使用Jmeter提供的分布式测试的功能来搭建分布式并发环境

     

    一、Jmeter分布式执行原理

    架构示意图

     image.png

     

    1、Jmeter分布式测试时,选择其中一台作为调度机(Master),其它机器作为执行机(Slave)。

     

    2、执行时,Master会把脚本发送到每台Slave上,Slave拿到脚本后就开始执行,Slave执行时不需要启动GUI,只需要在Slave上执行对应的启动命令,可以理解它是通过命令行模式执行的。

     

    3、在被监控的Server服务器上安装性能数据采集插件Agent后,在执行过程中,Agent会把结果实时回传给Master,Master会收集所有Server的信息并汇总。

     

    二、Jmeter安装教程

    1、JMeter需要JDK环境,所以需要先安装JDK

    2、下载JMeter的zip包

    3、这里下载的是apache-jmeter-3.0.zip, 进行解压

    Windows使用工具解压,例如:D:Program Files (x86)apache-jmeter-3.0

    Linux使用unzip命令解压,例如:unzip apache-jmeter-3.0.zip  -d apache-jmeter-3.0 (-d 为指定要解压到的文件夹名)

     

    4、设置环境变量

    Windows:右键“我的电脑”-》高级-》环境变量,在“系统变量”中点击“新建”,在变量名中输入:JMETER_HOME,变量值中输入:D:Program Files (x86)apache-jmeter-3.0,点击确定即可,再修改CLASSPATH变量,变量值中添加如下值:%JMETER_HOME%libextApacheJMeter_core.jar;%JMETER_HOME%libjorphan.jar;%JMETER_HOME%liblogkit-2.0.jar;% JMETER_HOME %in;  然后点击确定即可

    Linux:不配置环境变量,执行的时候只需要先切换到安装的目录

     

    5、检查jmeter是否安装OK

    Windows:打开cmd命令,输入jmeter.bat回车,也可以打开Jmeter的目录,双击jmeter.bat文件,如果正常启动Jmeter GUI界面则说明安装配置成功

    Linux:使用cd命令切换至Jmeter目录下的bin目录,然后使用输入sh jmeter.sh启动Jmeter GUI界面,弹出界面则说明安装成功

     

    三、执行机(slave)配置

    执行机只负责接收调度机的任务去执行并发,配置比较简单。

    1、切换至已安装好的Jmeter目录下的bin目录

    Windows 双击jmeter-server.bat,启动成功如下图:

    image.png

     

    Linux 通过cd命令切换至Jmeter目录的bin目录,执行

    ./jmeter-server -Djava.rmi.server.hostname=192.168.0.178 (后面为ifconfig查到的IP地址)

     

    2、上图上标红的IP和端口会在master里配置时用到。IP就是slave机器IP,端口默认是1099,端口也可以自定义,见第五点。

     

    3、如果有多台slave机,重复1步骤。

     

    四、调度机(Master)配置

    调度机用作脚本配置、触发启动,服务器性能数据监控

    1) 调度机负责脚本的分发

    1、脚本创建:访问百度

    image.png image.png

    2、配置Slave机信息,找到Jmeter的bin目录下jmeter.properties文件,修改remote_hosts的内容,IP和Port是slave机的IP以及默认端口1099,此处的端口可以自定义,见第五点:

     

    remote_hosts=192.168.0.178:1099,192.168.0.179:1099 多台slave之前用","隔开,可以看到标红的这个就是上面截图slave的IP,端口默认为1099

     

    3、打开Jmeter,选择运行,有运程启动、运程全部启动两个选项:

    image.png

     

    4、选择远程启动-->启动单个Slave或者全部启动

    这里启动了192.168.0.178:1099一台slave,所以只有一个结果(线程数和循环次数都是1)

    image.png

     

    slave控制台信息:

    image.png

     

    2)调度机负责性能数据的采集

    性能测试时,我们的关注点有两部分,第一服务本身并发、响应时间、QPS,第二服务器的资源使用情况:cpu memory I/O disk等,JMeter的plugins插件可以实现对"二"的监控,具体操作步骤如下(主要记录我的实践过程):

     

    1、下载插件

    访问网址http://jmeter-plugins.org/downloads/all/,下载三个文件。其中JMeterPlugins-Standard和JMeterPlugins-Extras是Master调度机的,ServerAgent是Server服务机的。

     image.png

    2、解压Master调度机的两个文件,进入其路径JMeterPlugins-Extras(Standard)-1.3.1libex、JmeterPlugins-Extras.jar(JmeterPlugins-Standard.jar)两个文件,放到JMeter客户端的 lib/ext文件夹中,打开JMeter,可在监听器中看到Permon Metrics Collector,客户端配置成功。

     image.png

    3、将ServerAgent-2.2.1.zip上传到被测服务器,解压,进入目录,Windows环境,双击ServerAgent.bat启动;linux环境执ServerAgent.sh启动,默认使用4444端口,出现如下情况即服务端成功:

    image.png

     

    4、ServerAgent启动的校验

    a、 在笔记本电脑打开telnet监听(控制面板-程序-打开或关闭Windows功能-telnet客户端勾选打开)

     

    b、cmd进入命令框,输入如下内容:

    telnet yourip  4444   #连接ServerAgent

    test #发送test进行测试

    exit #退出,即断开连接

     

    c 、观察server端是否有接收到消息,有出现则说明ServerAgent打开成功

     

    5、Jmeter客户端的监听测试

    a、打开JMeter.bat,添加监听器Permon Metrics Collector-Add Row添加一行monitor配置(修改Host/IP为测试IP)-运行-观察server日志即chart图标内容。

    image.png

    image.png

     

    b、添加线程组,设置循环次数为"永远";为线程组任意添加一个Sampler(并不设置参数),点击运行。如无意外可以获取chart图,点击stop,即结束监听数据。全部配置图如下

    image.png

     

    五、自定义端口:

    上面其实已经实现了Jmeter的分布式测试,这部分主要介绍下如何自定义slave端口:

    1、Slave:在slave机的Jmeter的bin目录下,找到jmeter.properties文件,修改如下两个配置项,比如修改为1888:

    server_port=1888

    server.rmi.localport=1888

     

    2、启动slave机上的jmeter-server.bat,如下图,端口已经修改为:1888

     image.png

    3、Master:修改master机器的jmeter.properties文件:

    remote_hosts=10.13.223.202:1000,10.13.225.12:1888

     

    4、重启jmeter.bat,如下图,端口已经变了:

    image.png

     

    六、其它说明:

    1、调度机(master)和执行机(slave)最好分开,由于master需要发送信息给slave并且会接收slave回传回来的测试数据,所以mater自身会有消耗,所以建议单独用一台机器作为mater。

    2、参数文件:如果使用csv进行参数化,那么需要把参数文件在每台slave上拷一份且路径需要设置成一样的。

    3、每台机器上安装的Jmeter版本和插件最好都一致,否则会出一些意外的问题。

  • 相关阅读:
    (精华)将json数组和对象转换成List和Map(小龙哥和牛徳鹤的对话)
    优先队列底层实现是堆(heap)(操作系统进程调度)
    (透彻理解)最精锐代码::堆的三种基本操作新建-插入-删除
    (考研)读者写者问题(附代码)
    (考研)黑电吃苹果同步互斥问题(附代码)
    (考研)哲学家进餐问题(附代码)
    (考研)吸烟者问题(赋代码)
    (考研)PV操作和信号量
    01.第一章_C++ Primer学习笔记_开始
    C++学习笔记
  • 原文地址:https://www.cnblogs.com/crstyl/p/14485032.html
Copyright © 2011-2022 走看看