当前位置:   article > 正文

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

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一次,出现负载均衡,交替打印

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/256161
推荐阅读
  

闽ICP备14008679号