jemter压测, skywalking链路分析

1. jemter 脚本编写、配置

使用jemeter 的最基础环境是需要java环境,java环境配置就不赘述了
这里我使用的版本是 apache-jmeter-5.1.1

1)定义全局变量-用户参数

比如定义一些全部变量值,就可以用这个,比如域名、环境变量之类的参数
路径为 添加-前置处理器-用户参数
在这里插入图片描述

2)定义全局 头部参数

路径-添加配置元件-HTTP信息头部管理器
在这里插入图片描述

3)参数设置- 使用文件内容下的列作为参数

添加一个配置元件,选择
在这里插入图片描述

配置数据文件内容的变量名,作为接口取值的一个参数
在这里插入图片描述
接口取值变量,使用 ${key} 这样来取值在这里插入图片描述

4) 串联接口传参 - 使用 json提取器

在这里插入图片描述
提取多个的话也是用, 隔开
在这里插入图片描述

5)使用Beashell 后置处理程序

import org.json.*;

String responsedata = prev.getResponseDataAsString();
log.info("Response Data: " + responsedata);

try {
    JSONObject data_obj = new JSONObject(responsedata);
    String id = data_obj.getJSONObject("content").getString("No"); # 提取返回的值
    String order_num = data_obj.getJSONObject("content").getString("Num");

    vars.put("id", id);  # 赋值给变量,后面的接口取值用 ${id} 这样
    vars.put("num", num);
} catch (JSONException e) {
    log.error("Error parsing JSON: " + e.getMessage());
}

6) 脚本使用redis 赋值session

有很多接口需要鉴权才能取值,通常我们是去刷新缓存的session 进行赋值的

import redis.clients.jedis.JedisPoolConfig ;
import redis.clients.jedis.JedisPool ;
import redis.clients.jedis.Jedis ;
import java.util.ArrayList;
import org.apache.commons.lang3.StringUtils;
import redis.clients.jedis.params.SetParams;

String session_id =  "${session_demo}${__threadNum}";
String host = "${redis_host}"; //服务器地址
int port = ${redis_port}; //端口号
String password = "${redis_pwd}"; //redis密码
int index = 1; //redis db,
String key = "user:login:session_id:"+ session_id; //key值
log.info("key:" + key);
JedisPoolConfig config = new JedisPoolConfig();
//最大空闲连接数,应用自己评估,不要超过ApsaraDB for Redis每个实例最大的连接数
config.setMaxIdle(200);
//最大连接数,应用自己评估,不要超过ApsaraDB for Redis每个实例最大的连接数
config.setMaxTotal(300);
config.setTestOnBorrow(false);
config.setTestOnReturn(false);

JedisPool pool = new JedisPool(config, host, 6379, 3000, password);
Jedis jedis = null;
log.info("beanshell set token...");
String tokenDemo="{\"userId\":${userId},\"account\":\"${loginAccount}\",\"name\":\"${loginName}\",\"superAdmin\":${isSuperAdmin}}";
//String tokenDemo="{\"userId\":${userId},\"account\":\"${ldap_name}\",\"name\":\"${emp_name}\",\"superAdmin\":${isSuperAdmin}}";

try {
    jedis = pool.getResource();
// 设置key 有效期10分钟
	SetParams params=new SetParams();
	jedis.set(key,tokenDemo,params.ex(60));
	String value= jedis.get(key);  //获取key值
	log.info(value);
} finally {
    if (jedis != null) {
        jedis.close();
    }
}

pool.destroy();
log.info("redis disconn...");
vars.put("session_id", session_id);

2. 配置压测脚本

1) 新建一个压测计划
2) 计划先新建一个线程组
3)设置 全局变量和 头部参数
4) 按需求配置token 脚本
5)如果需要循环取 csv 里的数据,需要先配置一个循环控制器,把文件参数和对应的取值接口放在下面
在这里插入图片描述
6) 配置接口
在这里插入图片描述
7) 在下面可以配置一个结果数和统计结果,以便我们看错压测情况,以及接口的运行情况

3. 开始压测

配置线程数,运行时间,开始压测,然后可以查看统计数据情况,接口运行情况
在这里插入图片描述
在这里插入图片描述

4. 压测数据分析

  1. 查看压测结果情况
    2)观察服务器内存使用情况,一般使用命令 top 检测一下就行
    3)查看数据库负载情况,我们使用的是阿里云的 rds和prodb 数据库,可以实时看到,里面也会抓慢SQL数据,我们设置的是超过1s即认为是 慢SQL
    在这里插入图片描述
    4) 根据接口去阿里云上捞日志,我们有加一个tid 去唯一记录整个接口的运行链路,找出运行比较慢的接口去 skywalking 上根据tid搜索,就可以定位到哪个链路上比较慢了
    在这里插入图片描述
    然后再去一步异步分析慢的原因,大概是这样的流程了。

今日语录:焦虑是自由引发的眩晕
在这里插入图片描述

  • 24
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值