zoukankan      html  css  js  c++  java
  • 性能测试系列:Jmeter使用记录

    1、做接口测试,服务器是10台docker,目标是把10台docker的cpu压满。我有三台压力机,windows Server操作系统,4c8g配置。

    经过尝试,每台压力机发起700vu,压力机cpu满,用并发数除以平均响应时间,算出tps应该是3600,但实际只达到了2200,响应时间不大,但tps却没有达到预期,这说明压力机的能力到头了,需要增加压力机。

    jmeter的操作手册,官网写的很详细(官网关于分布式压测的讲解),过一遍windows下分布式测试的配置步骤:

    所有机器在同一子网(因为jmeter的分布式调用是通过rmi远程调用,所以跨网段需要建立代理服务器。同一子网,就是大家用同一个网关,且子网掩码相同),配置相同的jmeter与jdk,把脚本的参数化文件放在各个压力机的相同路径下,

    各个压力机,只启动jmeter-server.bat即可,jmeter-server.bat启动会报Server failed to start: java.rmi.server.ExportException: Listen failed on port:,这时修改jmeter.properties的server.rmi.ssl.disable=false,改为true。

    找一台机器作为总控制,配置jmeter的bin目录下的jmeter.properties,改remote_hosts,写上各个压力机的ip,不用写总控制机自己的ip。

    然后打开脚本,将脚本里的参数化文件路径,写成绝对路径。然后在运行菜单里,点击启动所有,这时总控制机会把脚本分发到各个压力机上运行,结果会自动收录到总控制机。

    上面的方法是从机器的系统随机分配端口号,如果想指定端口号,需要修改从机的 jmeter.properties文件,并在主机的jmeter.properties里除了配ip还要配端口,具体参考

    扩展:使用docker搭建自动伸缩的压力机集群。

    2、被测试的服务器都在docker上,一台实例服务器,有多个docker容器,所以在进行性能测试时,不能使用top命令监控本机,而是通过docker stats 监控具体容器的cpu使用情况。docker stats的参数很少,无法形成实时的监控,需要找一下看有没有现成的docker资源监控软件,如果没有通用的可以用influxdb和grafana自己写一个。

    8个最佳Docker容器监控工具

    3、除了系统资源,docker下对jvm的监控,显然不如使用visualVM方便,另外,对应长时间的稳定性测试,无法长期监控jvm,这也需要有个监控软件。

    Java visualVM监控docker容器中的java项目

    jvisualvm+jmx监听docker容器中的jvm情况

    4、bean shell运行报错信息不明显,查看详细报错

    5、jmeter发起jdbc请求,不同的数据库要用不同的验证语句,不然会导致数据库连不上。数据库连接driverClass和jdbcUrl大全Jmeter--常用数据库validationQuery检查语句

    6、jmeter发起jdbc请求,直接拼写sql是硬解析还是软解析?

      取决于query type。使用select statement是硬解析。目前java框架大都使用了绑定变量,属于软解析。jmeter要改成绑定变量,需要改成 prepared select statement (JDBC为什么要使用PreparedStatement而不是Statement),如图所示:

    7、关于cookie

    loadrunner进行http请求时,若服务器返回set-cookie,则后续请求会自动添加cookie。

    jmeter的http请求,只要新建cookie配置,就会自动检测服务器的set-cookie并未请求添加cookie。

    说明:jmeter中cookie管理器使用方式分两种
    
    1. 自动:将cookie管理器添加到测试计划中,cookie管理器会自动记录指定域响应的cookie信息,并且在相同域中,下条请求会自动附加cookie信息
    
    2. 手动:有时候需要附件指定cookie,将cookie管理器添加到测试计划中或指定线程组中,点击添加手动添加cookie名、值、域
    
    注意:手动添加cookie时必须添加域(网站域名)

     Jmeter使用http请求时长连接的建立与保持问题

    8、Jmeter里用户定义变量不会随迭代变化,前置处理的用户参数可以随迭代变化。

    9、jmeter 模仿each occurrence 不行;

       性能脚本要避免本地函数耗时过长,会使压力变小,tps不准确。

    10、新建csv文件,可以通过txt改后缀,然后用记事本编辑。如果直接用xls改后缀,会读取乱码;
       做参数关联,若用正则,被参数化的值必须是(.*?),不然正则无效;

    11、Linux上启动jmeter

    登录linux压力机
    压力机jmeter文件夹下有脚本和CSV文件;
    cd到/jmeter/script脚本文件夹下,执行命令:
    jmeter -n -t 要执行的脚本名称 -l /jmeter/result/结果名称.jtl
    场景跑完后将结果下载到本地,在jmeter中打开结果进行统计;

    12、jmeter测试压力机报错no buffer,大量time_wait。

    time_wait是三次握手最后阶段,服务器已经完事了,客户端知道服务器完事了,变成这个状态,等一会然后自己close。

    这说明服务器处理很快,压力机资源不够了。

    jmeter本地默认的http取样器,用的是http4client,高级里面改成java,就会用线程池了,就不会报no buffer了。

  • 相关阅读:
    CF1051F The Shortest Statement 题解
    CF819B Mister B and PR Shifts 题解
    HDU3686 Traffic Real Time Query System 题解
    HDU 5969 最大的位或 题解
    P3295 萌萌哒 题解
    BZOJ1854 连续攻击游戏 题解
    使用Python编写的对拍程序
    CF796C Bank Hacking 题解
    BZOJ2200 道路与航线 题解
    USACO07NOV Cow Relays G 题解
  • 原文地址:https://www.cnblogs.com/zhaot1993/p/13528793.html
Copyright © 2011-2022 走看看