• 性能测试十八:jmeter分布式


    一台压力机产生得压力是有限的,尤其是jmeter,java本来性能就不是很好,并发特别多的时候,jmeter的性能会急剧下降,正常的接口,若单台压力机,超过1000并发以后,jmeter的性能就不怎么行了    所以需要多个压力机,即多个机器部署jmeter产生压力

    分布式测试步骤:
    系统HOSTS文件中进行类似 本机IP 主机名的配置
    如10.0.0.23 zhoucentos,否则启动jmeter server会报错!

    1,在每台机器上都部署 jmeter
    2,如果是java脚本,将java脚本和相关lib包都放在jmeter目录lib/ext下
    3,将jmeter的场景文件jmx上传到服务器上的任意位置,jmx只放在主压力机上即可,如果有参数文件,需将参数文件放到所有压力机与主压力机的相同目录下
    4,在每台机器上进入到jmeter的bin目录下,都启动nohup ./jmeter-server &(后台启动jmeter-server服务)
    5,进入到jmeter目录下,将两台机器上的jmeter下所有文件都赋予可执行权限,chmod -R +x ./*
    6,在主jmeter的bin目录下,修改jmeter.properties,将其中的remote_hosts修改为作为压力机的两台机器ip,remote_hosts=127.0.0.1,192.168.0.102?
    7,在主jmeter的机器上,执行/export/servers/apache-jmeter-xxx/bin/jmeter -n -t jdbc.jmx -l result -jtl -r(示例,具体目录和路径自定义)

    关键步骤:
    1,如果是http脚本,在controller的机器上有脚本文件即可;
    如果是Java脚本,在每一台机器上都得有脚本文件和依赖的jar包
    2,进到Jmeter 根目录下需要添加执行权限 chmod -R +x ./*

    以我的虚拟机为例:

    先正常关闭虚拟机

    liunx虚拟机上右键复制,勾选重新初始化mac地址,完全复制

    然后都启动,用Xshell连接,若副本没有ip则自己去配置一下,参考Xshell连接liunx

    系统HOSTS文件中进行类似 本机IP 主机名的配置: vi /etc/hosts   每台机器都要配

     

    1···、

    2···、

    3···

    4、在每台机器上进入到jmeter的bin目录下,都启动nohup ./jmeter-server &(后台启动jmeter-server服务)

    启动server

    第一种方式:阻塞式的启动,即启动成功后不允许退出,若退出则关闭此jmeter服务进程 ,想做其他动作就只能复制一个ssh渠道,不建议用此方法

    若这一步报未知的主机XXX,就是hosts里面的ip和名字没配好

    第二种方式:以后台的方式启动nohup ./jmeter-server &   (此方式因为是后台挂起,所以看不到是否有报错)

    把要后台启动的程序放在nohup和&之间即可

    nohup:非挂起的意思,nohup可以把任何文件都以后台的形式启动

    此时再敲一下回车即可,输入 ps -ef|grep jmeter-server  查看此进程

    所有机器都要启动jmeter-server

    !ps即可执行最近一次执行的ps命令

    5、进入到jmeter目录下,将两台机器上的jmeter下所有文件都赋予可执行权限,chmod -R +x ./*

    -R:如果当前赋予权限的文件夹下还有文件夹,则把下面的文件夹也赋予权限

    6、在主jmeter的bin目录下,修改jmeter.properties,将其中的remote_hosts修改为作为压力机的两台机器ip,remote_hosts=127.0.0.1,192.168.0.102?

     vi jmeter.properties

     

    7、在主jmeter的机器上,执行/export/servers/apache-jmeter-xxx/bin/jmeter -n -t jdbc.jmx -l result -jtl -r(示例,具体目录和路径自定义)

     启动要被压测的服务器上的tomcat

    回到存放jmx脚本的目录下

    查看脚本配置项有没有问题,有就修改

    根据HTTPS查找到请求的内容

    由于是多机运行此脚本,如果ip是localhost的话,相当于是所有jmeter压力机自己压自己,所以需将ip改为被压服务器的ip

    此时先别着急执行多机压测,先看一下单机压测是否成功,如果单机压测都失败,那么多机压测也一定会失败

    错误率0,此时可以ctrl+c停止单机压测,并开始多机压测

    第一种方式:执行命令:jmeter -n -t time.jmx -l time.jtl -r

    -r:jmeter运行时读取到-r,就会去配置文件中读取里面的ip,并将读取到的ip下的jmeter全部运行

    之前处理结果报告的方式一样可以处理此结果报告

    第二种方式:执行命令 jmeter -n -t time.jmx -l time.jtl -R ip1,ip2

    jmeter读取到-R,不回去读取配置文件里面的ip,会读取R后面跟的ip,并启动

    此方法不建议,如果机器多的话,命令会非常长

    如果此处提示tobusy,则需要将tomcat-server重新启动一下,全部重新起一下

    如,多机压测未完成,就Ctrl+c强制停止,此时其他机器还在跑,这个时候再次运行多机压测脚本,就会tobusy

    重启jmeter-server:先kill掉进程,再启动

    先执行 ps -ef|grep jmeter-server  找到jmeter-server的进程

    执行:kil -9 端口号,强制关闭

    然后在去启动jmeter-server

  • 相关阅读:
    C# EntityFramework 入门之 Code First
    import cx_Oracle ImportError: DLL load failed: 找不到指定的模块。
    unnitest用例按顺序执行方法总结
    Grid + selenium分布式执行自动化测试
    selenium自动化测试工具的使用总结
    使用SQLAlchemy操作已存在的数据库的表
    map()函数 lambda函数 zip()函数的使用
    使用SQLAlchemy操作MySQL以及执行原生的sql语句
    python创建文件/文件夹,判断文件/文件夹是否存在以及os.path模块的使用
    python函数的四种参数定义方式和传递方式
  • 原文地址:https://www.cnblogs.com/malinalian/p/10583021.html
Copyright © 2020-2023  润新知