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=线程数启动,并上下调整到所需的。
版权归原作者 一个java开发 所有, 如有侵权,请联系我们删除。