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


    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
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    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';
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    ②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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    ③启动两个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()
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    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()
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    观察:

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

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

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

  • 相关阅读:
    查看锁定SAP账号的IP
    外包干了2个月,技术退步明显.......
    node.js入门之 http.Agent 控制并发数量
    pip安装或更新
    小程序开发.微信小程序.组件.视图容器
    可视化 | (四)可视化降维
    k8s二进制安装与部署
    了解这几点,让你轻松掌握滑台模组的选型方法!
    java(抽象内部类)笔记
    工业机器人“智能制造产线6”教学案例
  • 原文地址:https://blog.csdn.net/weixin_45565886/article/details/136635997