0


jmeter==docker安装nginx , jmeter压力测试并发20个请求在1秒内发出

docker安装nginx

docker pull nginx

创建挂载目录

mkdir -p /home/nginx/conf
mkdir -p /home/nginx/log
mkdir -p /home/nginx/html

生成容器

docker run --name nginx -p 9001:80 -d nginx

将容器nginx.conf文件复制到宿主机

docker cp nginx:/etc/nginx/nginx.conf /home/nginx/conf/nginx.conf

将容器conf.d文件夹下内容复制到宿主机

docker cp nginx:/etc/nginx/conf.d /home/nginx/conf/conf.d

将容器中的html文件夹复制到宿主机

docker cp nginx:/usr/share/nginx/html /home/nginx/

直接执行docker rm nginx或者以容器id方式关闭容器

找到nginx对应的容器id

docker ps -a

关闭该容器

docker stop nginx

删除该容器

docker rm nginx

修改NGINX配置文件,使得一秒可以接受2个请求,1个请求缓冲区。所以一秒可以接受3个请求。

[root@localhost ~]# cd /home/nginx/conf/
[root@localhost conf]# 
[root@localhost conf]# ls
conf.d  nginx.conf
[root@localhost conf]# vim nginx.conf 
[root@localhost conf]# cat nginx.conf 

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {

    limit_req_zone $binary_remote_addr zone=mylimit:10m rate=2r/s;
    limit_conn_zone $binary_remote_addr zone=perid:10m;
    limit_conn_zone $server_name zone=preserver:10m;

    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;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}
[root@localhost conf.d]# cd /home/nginx/conf/conf.d
[root@localhost conf.d]# ls
default.conf
[root@localhost conf.d]# cat default.conf 
server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;

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

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
        
    limit_req zone=mylimit burst=1 nodelay;
    limit_conn perid 20;
    limit_conn preserver 10000;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

启动NGINX

docker run -p 9002:80 --name nginx -v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /home/nginx/conf/conf.d:/etc/nginx/conf.d -v /home/nginx/log:/var/log/nginx -v /home/nginx/html:/usr/share/nginx/html -d nginx:latest

curl 127.0.0.1:9002

=========================================================

jemter测试

在一秒内发出10个请求===========

添加线程组,设置参数10 1 1

添加HTTP请求并设置协议 地址端口 路径 编码

给HTTP请求添加监听器: 第一个为结果树,第二个为汇总报告

点击绿三角启动访问

查看结果树,一秒内发出的10个请求绿了3个

查看汇总报告,10个请求,70%异常,也就是30%正常,刚好3个正常。

=======================================================

选中结果树和汇总报告,直接delete,然后新建

将线程组的线程数改成100和1000, 发现100个异常了97%,也就是正常请求到了3个。

1000个异常了99.5%,正常的就是5个,因为有个缓冲区,本来应该是3个,可能多放过去了2个。也可能是电脑性能导致这1000个不是在1秒内到达NGINX的。

=============================================================

修改NGINX配置文件,取消缓冲区。

重启NGINX

将线程组个数设置成10或者20,删掉再添加结果数,可以发现成功个数都是2,不是之前的3个了。

==================================================

然后修改nginx.conf,设置rate=50r/s ,并且重启nginx

然后jmeter线程组设置成50,发现成功数目小于50,这是为什么?

之前用的nginx是在本机虚拟机上部署的,可能是网速太好了,将nginx设置到一个网速不那么好的机子上。也是一样的结果,设置的50,为什么一秒内发送50个请求过去没有完全成功呢?

50r/s 实际上是限制:每1S/50=20毫秒处理一个请求。这意味着,自上一个请求处理完后,若后续120毫秒内又有请求到达,将拒绝处理该请求。

可能是换的这台机子网速也不是那么不好吧,导致请求之间没有合适的时间间隔。

自己用java写了个有时间间隔的请求,发现也是一堆503。。。

package com.example.pressuretest;

import java.io.IOException;

public class Test22 {
    public static void main(String[] args) throws IOException, InterruptedException {

        for (int i = 0; i < 30; i++) {
            new Thread(() -> {
                String s = null;
                try {
                    s = HttpClientUtil.get2("http://192.168.136.101:9002");
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
                System.out.println("code" + s);
            }).start();

            //每过40MS发出一个请求
            Thread.sleep(40);
        }
    }
}

看来只能解读我我网速太好了吧。。

================================================================

Ramp-up Period(in seconds)

【1】决定多长时间启动所有线程。如果使用10个线程,ramp-up period是100秒,那么JMeter用100秒使所有10个线程启动并运行。每个线程会在上一个线程启动后10秒(100/10)启动。Ramp-up需要要充足长以避免在启动测试时有一个太大的工作负载,并且要充足小以至于最后一个线程在第一个完成前启动。 一般设置ramp-up=线程数启动,并上下调整到所需的。

标签: jmeter nginx 服务器

本文转载自: https://blog.csdn.net/hebian1994/article/details/126891372
版权归原作者 一个java开发 所有, 如有侵权,请联系我们删除。

“jmeter==docker安装nginx , jmeter压力测试并发20个请求在1秒内发出”的评论:

还没有评论