Mac版Jmeter安装与使用模拟分布式环境

news2024/11/18 22:31:20

Mac版Jmeter安装与使用&模拟分布式环境

1 安装Jmeter

1.1 安装Java环境

国内镜像地址:https://repo.huaweicloud.com/java/jdk/11.0.2+9/jdk-11.0.2_osx-x64_bin.dmg

在这里插入图片描述
下载dmg后,双击进行安装。

配置环境变量:

# 1 打开环境变量配置文件
open ~/.bash_profile

# 2 在最后一行插入
export JAVA_11_HOME=`/usr/libexec/java_home -v 11` 

export JAVA_HOME=$JAVA_11_HOME

alias jdk11="export JAVA_HOME=$JAVA_11_HOME"

# 3 刷新配置文件
source ~/.bash_profile

# 4 查看配置是否生效
java -version

在这里插入图片描述

1.2 下载安装Jmeter

①官网下载安装包:https://jmeter.apache.org/download_jmeter.cgi
在这里插入图片描述

②下载完成后,直接解压
在这里插入图片描述

  • bin:Jmeter可执行文件

  • docs:包含用户指南等文档。

  • extras:包含各种使用样例。

  • lib:该目录包含 Jmeter 所需的 JAR 包(也可以添加其他的 JAR 包)。

  • printable_docs:里面是一些可打印的文件。

③启动Jmeter

进入bin目录,执行sh jmeter

在这里插入图片描述

1.3 插件安装(可选)

插件地址:https://jmeter-plugins.org/wiki/Start/

  • TPS:Transactions Per Second 也就是事务数/秒
  • QPS:QPS Queries Per Second 是每秒查询率,是一台服务器 每秒能够相应的查询次数,是对一个特定的查询服务器 在规定时间内 所处理流量多少的衡量标准, 即每秒的响应请求数,也即是最大吞吐能力。

Jmeter默认的图表比较简单。大家可根据需要自行安装插件。

以安装TPS插件为例:

  1. 来到官网,搜索插件名,点击
    在这里插入图片描述
  2. 点击Download
    在这里插入图片描述3. 点击版本号,进行下载
    在这里插入图片描述

下载后,我们解压后放到jmeter的安装目录的相同位置,如:

  1. lib目录下的就放到apache-jmeter-3.0\lib下
  2. ext下的就放到apache-jmeter-3.0\lib\ext\ 下,
  3. 重新启动Jmeter。

1.4 使用

详情用法参考:https://editor.csdn.net/md/?articleId=127047200

步骤:创建测试计划-创建线程组(设置并发数)- 创建HTTP请求

观测结果:
在这里插入图片描述

2 本地模拟分布式环境:nginx+iris web服务

思路:

  1. docker启nginx,nginx配置:server_name ziyi.com,当拦截ziyi.com服务并转发给(本地8888和9999两个服务):
    server docker.for.mac.host.internal:8888;
    server docker.for.mac.host.internal:9999;
  2. 本地配置域名解析:sudo vim /etc/hosts。添加解析记录:
    127.0.0.1 ziyi.com
  3. docker启动nginx
  4. 启动两个iris web服务,分别为8888和9999端口

2.1 安装docker

yum install -y yum-utils
yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
yum install docker
systemctl start docker

2.2 安装配置nginx

①nginx.conf

以mac版本为例:因为nginx是在mac版的docker上跑的,所以可以通过 docker.for.mac.host.internal指向我mac宿主机,保证nginx转发请求到宿主机(mac),实现负载均衡。

  • 大家也可以通过create docker网络实现docker中的nginx转发到宿主机
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;

events {
    worker_connections 1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    upstream backend_consume {
        # mac下的docker有加一层虚拟机,所以无法直接访问,需要使用docker.for.mac.host.internal
        server docker.for.mac.host.internal:8888 weight=1;
        server docker.for.mac.host.internal:9999 weight=1;
        # server 127.0.0.1:8888; # 第一个服务
        # server 127.0.0.1:9999; # 第二个服务

        # 如果要实现更高级的负载均衡策略,比如轮询、权重等,可以在这里添加相应配置
        # 比如:
        # least_conn; # 最小连接数分配
        # ip_hash;    # 根据客户端IP进行哈希一致性分配
    }

    server {
        listen 80;

        server_name ziyi.com;

        location / {
            proxy_pass http://backend_consume/consume;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         	add_header 'Access-Control-Allow-Origin' '*';
         	add_header 'Access-Control-Allow-Credentials' 'true';
        }
    }
}
②docker启动nginx
docker run -d \
--name nginx \
-v /Users/ziyi2/docker-home/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /Users/ziyi2/docker-home/nginx:/var/log/nginx \
-p 80:80 nginx
③启动两个iris web服务

svc1:

package main

import (
	"github.com/kataras/iris/v12"
	context2 "github.com/kataras/iris/v12/context"
)

func main() {
	app := iris.New()
	app.Get("/consume", func(c *context2.Context) {
		c.JSON("ok port:8888")
	})
	app.Use(Cors)
	app.Listen(":8888", nil)
}

func Cors(ctx iris.Context) {
	ctx.Header("Access-Control-Allow-Origin", "*")
	ctx.Header("Access-Control-Allow-Credentials", "true")
	ctx.Next()
}

svc2:

package main

import (
	"github.com/kataras/iris/v12"
	context2 "github.com/kataras/iris/v12/context"
)

func main() {
	app := iris.New()
	app.Get("/consume", func(c *context2.Context) {
		c.JSON("ok port:9999")
	})
	app.Use(Cors)
	app.Listen(":9999", nil)
}

func Cors(ctx iris.Context) {
	ctx.Header("Access-Control-Allow-Origin", "*")
	ctx.Header("Access-Control-Allow-Credentials", "true")
	ctx.Next()
}
观察:

配置20个并发:
在这里插入图片描述

新建请求,填写域名及路径:
在这里插入图片描述

后台打印日志,应该是8888一次、9999一次,出现负载均衡,交替打印

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

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

相关文章

js实现扫描线填色算法使用canvas展示

算法原理 扫描线填色算法的基本思想是:用水平扫描线从上到下扫描由点线段构成的多段构成的多边形。每根扫描线与多边形各边产生一系列交点。将这些交点按照x坐标进行分类,将分类后的交点成对取出,作为两个端点,以所填的色彩画水平…

结构体联合体枚举和位段

文章目录 结构体结构体类型的声明特殊的声明 结构的自引用结构体变量的定义和初始化结构体内存对齐为什么要内存对齐结构体传参结构体实现位段(位段的填充&可移植性)位段位段的内存分配空间如何开辟位段的跨平台问题位段的应用 枚举枚举类型的定义枚…

网络学习:IPV6报文详解

目录 前言: IPV6报文格式 IPV6基本报头 IPV6扩展报头 前言: 首先IPV6是属于网络层的一种协议,作为下一代IP协议,而想要学习一种协议就必不可少的需要去具体的研究协议报文中的各个参数以及其对应的功能作用。 IPV6报文格式 I…

在命令行中输入py有效,输入python无效,输入python会跳转到microsoft store

这里写自定义目录标题 如果你已经尝试过将python添加到系统变量如果你还未将python添加到系统变量没有python安装包且没有配置系统变量 如果你已经尝试过将python添加到系统变量 打开 运行,输入cmd,在命令行中输入 where python。 如果看到了这个 win…

Java基础-集合_上

文章目录 1.基本介绍2.集合的框架体系(单列、双列)单列集合双列集合比较 3.Collection接口和常用方法1.Collection接口实现类的特点2.常用方法(使用ArrayList演示)代码结果 3.迭代器遍历基本介绍代码结果 4.增强for循环遍历代码结…

滑动窗口和螺旋矩阵

209. 长度最小的子数组 题目 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续 子数组 [numsl, numsl1, ..., numsr-1, numsr] ,并返回其长度**。**如果不存在符合条件的子数组,返回…

十八、多线程JUC

目录 一、什么是多线程二、多线程的两个概念(并发和并行)三、多线程的实现方式3.1 继承Thread类的方式进行实现3.2 实现Runnable接口的方式进行实现3.3 利用Callable接口和Future接口方式实现 四、常见的成员方法五、线程的生命周期六、线程安全的问题七…

Nacos安装与集群搭建

Nacos安装与集群搭建 Nacos安装指南1.Windows安装1.1.下载安装包1.2.解压1.3.端口配置1.4.启动1.5.访问 2.Linux安装2.1.安装JDK2.2.上传安装包2.3.解压2.4.端口配置2.5.启动 3.Nacos的依赖Nacos集群搭建1.集群结构图2.搭建集群2.1.初始化数据库2.2.配置Nacos2.3.启动2.4.nginx…

JavaScript进阶:js的一些学习笔记-this指向,call,apply,bind,防抖,节流

文章目录 1. this指向1. 箭头函数 this的指向 2. 改变this的指向1. call()2. apply()3. bind() 3. 防抖和节流1. 防抖2. 节流 1. this指向 1. 箭头函数 this的指向 箭头函数默认帮我们绑定外层this的值,所以在箭头函数中this的值和外层的this是一样的箭头函数中的…

Linux——线程池

线程池的概念 线程池也是一种池化技术,可以预先申请一批线程,当我们后续有任务的时候就可以直接用,这本质上是一种空间换时间的策略。 如果有任务来的时候再创建线程,那成本又要提高,又要初始化,又要创建数…

揭示数据在内存中存储的秘密!

** ** 悟已往之不谏,知来者犹可追 ** ** 创作不易,宝子们!如果这篇文章对你们有帮助的话,别忘了给个免费的赞哟~ 整数在内存中的存储 整数的表达方式有三种:原码、反码、补码。 三种表示方法均有符号位和数值位两部分…

【Java】List, Set, Queue, Map 区别?

目录 List, Set, Queue, Map 区别? Collection和Collections List ArrayList 和 Array区别? ArrayList与LinkedList区别? ArrayList 能添加null吗? ArrayList 插入和删除时间复杂度? LinkedList 插入和删除时间复杂度&…

51单片机基础篇系列-定时/计数器的控制工作方式

🌈个人主页:会编程的果子君 💫个人格言:“成为自己未来的主人~” 定时/计数器的控制 80C51单片机定时/计数器的工作由两个特殊功能寄存器控制,TMOD用于设置其工作方式: 1.工作方式寄存器TMOD 工作方式寄存器TMO…

IO流(主要是记住四大类InputStream,OutputStream、Reader和Writer,其他都是他们的子类)

IO流 1、文件 (1)文件概念 文件就是保存数据的地方。例如word文档,txt文件,execl文件等等。 (2)文件流 文件在程序中是以流的形式来操作的。 流:数据在数据源(文件)…

【MySQL基础】MySQL基础操作三

文章目录 🍉1.联合查询🥝笛卡尔积 🍉2.内连接🥝查询单个数据🥝查询多个数据 🍉3.外连接🍉4.自连接🍉5.合并查询 🍉1.联合查询 🥝笛卡尔积 实际开发中往往数…

docker 、postgres 数据库常用命令大全,持续更新

使用postgres 数据库,经常会忘记命令。今天抽时间整理一份常用命令列表,附带实践 使用docker 执行命令,导出数据库 docker exec -i postgres-container pd_dump -U postgres -d zxapp > /opt/zxapp.sql或者进入交互式界面: docker exec -i…

算力,承载AI无限可能

年后不久,美国人工智能研究公司OpenAI推出的Sora模型引起了广泛关注,对于人工智能发展之快的感慨还未过去,3月初,Anthropic丢出一颗“王炸”Claude3,其中Claude 3 Opus宣称在基准测试中优于OpenAI的GPT-4和Google的Gem…

vue3模块化引用组件和引用ts,调用ts中的接口

以简单的登录功能为例子 1.在util中创建loginValidators.ts import { ref, reactive } from vueinterface User{email: string;password: string; }export const loginUserreactive<User>({email: ,password: })interface Rules{email: {required: boolean;message: …

【MySQL】3. 库的操作

库的操作 1. 创建数据库 语法&#xff1a; CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [,create_specification] ...]create_specification:[DEFAULT] CHARACTER SET charset_name[DEFAULT] COLLATE collation_name说明&#xff1a; 大写的表示关键字 …

时间日期格式化

在创建的项目中&#xff0c;往往涉及到时间日期的参数&#xff0c;都不是显示正常&#xff08;中国&#xff09;时区&#xff0c;至于是那儿的时区小编也不知道&#xff01;但是&#xff0c;我们可以自定义返回的时间日期格式&#xff01; public class DataUtils {/*** 2021-0…