nginx 响应或采样时间与延迟与 jmeter 的连接时间
nginx response or sample time vs latency vs connect time with jmeter
我有一个非常好的 nginx 配置,我正在尝试在 10 秒内测试 1000 个请求的负载 以使用 https 连接从 nginx 加载 index.html 页面。
对于所有 1000 个样本,延迟和连接时间是一致的。但是前几个样本的响应时间还可以,但对于其余样本来说真的很糟糕。我附上样品。请看第一个截图。您可以看到条目是一致的。 但是在第二张截图中,你可以发现随着时间的推移响应时间越来越大。
这可能是什么原因?????
是否因为硬件端口限制 (32000 - 61000)?但
对于虚拟主机,我不能编辑这个。
虚拟主机是否有任何文件描述符打开限制?
您可以看到我将 ulimit -a 和 -n 设置为 200000 左右。将
这适用于虚拟机吗?
我是否需要在 nginx 配置中进行更多调整才能使
响应时间一致 ?
我正在尝试这个 HTTPS 连接,是不是 b/c 每个
加密连接需要时间,系统正忙于 cpu
周期?我只是想了解问题是否出在
硬件/软件级别 ?
我的硬件是虚拟托管的。下面是配置
- 架构:x86_64
- CPU 运算模式:32 位、64 位
- 字节顺序:Little Endian
- CPU(s): 16
- 供应商 ID:GenuineIntel
- CPU 家庭:6
- 型号:26
- 步进:5
- CPU 兆赫:2266.802
- BogoMIPS:4533.60
- 虚拟化:VT-x
这是nginx的配置:
server {
listen 80;
server_name xxxx;
# Strict Transport Security
add_header Strict-Transport-Security max-age=2592000;
rewrite ^/.*$ https://$host$request_uri? permanent;
}
server {
listen 443 ssl;
server_name xxxx;
location / {
try_files $uri $uri/ @backend;
}
## default location ##
location @backend {
proxy_buffering off;
proxy_pass http://glassfish_servers;
proxy_http_version 1.1;
proxy_set_header Connection "";
# force timeouts if the backend dies
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
#proxy_redirect off;
# set headers
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
}
ssl_certificate /etc/nginx/ssl/ssl-bundle.crt;
ssl_certificate_key /etc/nginx/ssl/xxxx.key;
ssl_session_cache shared:SSL:20m;
ssl_session_timeout 10m;
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS;
}
这是我收集的汇总报告:
可能不是nginx的问题。根据您配置 JMeter 的方式,负载可能比您预期的要高得多。
我会推荐以下内容:因为每 10 秒 1000 个请求是 100 requests/second,
添加线程组
- 线程:~300
- 加速:30
- 循环次数:永远
- 调度程序 -> 持续时间 -> 即 240 秒
- 添加HTTP请求到锤子index.html
- 添加 Constant Throughput Timer 以将负载限制为每秒 100 个请求 - 将是每分钟 6000 个请求
提供足够的 JMeter Java HEAP space - 根据您的 OS 在 jmeter
或 jmeter.bat
文件中找到以下行:
HEAP="-Xms512m -Xmx512m"
并将值调整为从总物理 RAM 的 50% 开始到 80% 结束
运行 JMeter in non-GUI mode 禁用所有侦听器,如:
jmeter -n -t /path/to/your/testplan.jmx -l /path/to/testresults.jtl
- 测试完成后打开 JMeter GUI,添加您选择的侦听器(Aggregate Report 非常好)并分析结果
您还可以查看 JMeter Plugins project, it provides i.e. PerfMon Metrics Collector so you will be able to monitor your server health during the load test and a number of extended graphs to visualise your test or Taurus,它是 JMeter 和其他负载测试工具的包装器,可简化配置和执行过程,并使结果分析更容易。
我有一个非常好的 nginx 配置,我正在尝试在 10 秒内测试 1000 个请求的负载 以使用 https 连接从 nginx 加载 index.html 页面。 对于所有 1000 个样本,延迟和连接时间是一致的。但是前几个样本的响应时间还可以,但对于其余样本来说真的很糟糕。我附上样品。请看第一个截图。您可以看到条目是一致的。 但是在第二张截图中,你可以发现随着时间的推移响应时间越来越大。 这可能是什么原因?????
是否因为硬件端口限制 (32000 - 61000)?但 对于虚拟主机,我不能编辑这个。
虚拟主机是否有任何文件描述符打开限制? 您可以看到我将 ulimit -a 和 -n 设置为 200000 左右。将 这适用于虚拟机吗?
我是否需要在 nginx 配置中进行更多调整才能使 响应时间一致 ?
我正在尝试这个 HTTPS 连接,是不是 b/c 每个 加密连接需要时间,系统正忙于 cpu 周期?我只是想了解问题是否出在 硬件/软件级别 ?
我的硬件是虚拟托管的。下面是配置
- 架构:x86_64
- CPU 运算模式:32 位、64 位
- 字节顺序:Little Endian
- CPU(s): 16
- 供应商 ID:GenuineIntel
- CPU 家庭:6
- 型号:26
- 步进:5
- CPU 兆赫:2266.802
- BogoMIPS:4533.60
- 虚拟化:VT-x
这是nginx的配置:
server {
listen 80;
server_name xxxx;
# Strict Transport Security
add_header Strict-Transport-Security max-age=2592000;
rewrite ^/.*$ https://$host$request_uri? permanent;
}
server {
listen 443 ssl;
server_name xxxx;
location / {
try_files $uri $uri/ @backend;
}
## default location ##
location @backend {
proxy_buffering off;
proxy_pass http://glassfish_servers;
proxy_http_version 1.1;
proxy_set_header Connection "";
# force timeouts if the backend dies
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
#proxy_redirect off;
# set headers
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
}
ssl_certificate /etc/nginx/ssl/ssl-bundle.crt;
ssl_certificate_key /etc/nginx/ssl/xxxx.key;
ssl_session_cache shared:SSL:20m;
ssl_session_timeout 10m;
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS;
}
这是我收集的汇总报告:
可能不是nginx的问题。根据您配置 JMeter 的方式,负载可能比您预期的要高得多。
我会推荐以下内容:因为每 10 秒 1000 个请求是 100 requests/second,
添加线程组
- 线程:~300
- 加速:30
- 循环次数:永远
- 调度程序 -> 持续时间 -> 即 240 秒
- 添加HTTP请求到锤子index.html
- 添加 Constant Throughput Timer 以将负载限制为每秒 100 个请求 - 将是每分钟 6000 个请求
提供足够的 JMeter Java HEAP space - 根据您的 OS 在
jmeter
或jmeter.bat
文件中找到以下行:HEAP="-Xms512m -Xmx512m"
并将值调整为从总物理 RAM 的 50% 开始到 80% 结束
运行 JMeter in non-GUI mode 禁用所有侦听器,如:
jmeter -n -t /path/to/your/testplan.jmx -l /path/to/testresults.jtl
- 测试完成后打开 JMeter GUI,添加您选择的侦听器(Aggregate Report 非常好)并分析结果
您还可以查看 JMeter Plugins project, it provides i.e. PerfMon Metrics Collector so you will be able to monitor your server health during the load test and a number of extended graphs to visualise your test or Taurus,它是 JMeter 和其他负载测试工具的包装器,可简化配置和执行过程,并使结果分析更容易。