目前,我在运行在tomcat上的grails 3上的系统构建中使用JMeter运行负载测试。在每秒发送20k请求后,我在nginx错误日志中得到“连接到上游客户端时没有上游的活动”。我们的应用程序是多租户基础,所以我需要执行高负载。这是我的nginx配置。
worker_processes 16;
worker_rlimit_nofile 262144;
error_log /var/log/nginx/error.log;
events {
worker_connections 24576;
use epoll;
multi_accept on;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 600;
keepalive_requests 100000;
access_log off;
server_names_hash_max_size 4096;
underscores_in_headers on;
client_max_body_size 8192m;
log_format vhost '$remote_addr - $remote_user [$time_local] $status "$request" $body_bytes_sent "$http_referer" "$http_user_agent" "http_x_forwarded_for"';
proxy_connect_timeout 120;
proxy_send_timeout 120;
proxy_read_timeout 120;
gzip on;
gzip_types text/plain application/xml text/css text/js text/xml application/x-javascript text/javascript application/json application/xml+rss image application/javascript;
gzip_min_length 1000;
gzip_static on;
gzip_vary on;
gzip_buffers 16 8k;
gzip_comp_level 6;
gzip_proxied any;
gzip_disable "msie6";
proxy_intercept_errors on;
recursive_error_pages on;
ssl_prefer_server_ciphers On;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-RC4-SHA:ECDHE-RSA-AES256-SHA:RC4-SHA;
include /etc/nginx/conf.d/*.conf;
}
如何配置高并发负载?
答案 0 :(得分:2)
我在perf期间多次看到这种行为。测试
在繁重的工作负载下,上游服务器的性能可能不够,upstream module可能将上游服务器标记为不可用。
相关参数(服务器指令)是:
max_fails=number
设置在fail_timeout
参数设置的持续时间内发生的与服务器通信的不成功尝试次数,以考虑服务器在fail_timeout
参数设置的持续时间内不可用。默认情况下,不成功尝试次数设置为1.零值禁用尝试的计费。被认为是不成功的尝试由proxy_next_upstream
指令定义。
fail_timeout=time
设定:
指定次数的不成功尝试的时间 与服务器通信时应该考虑服务器 不可用;
以及服务器被视为不可用的时间段。
默认情况下,参数设置为10秒。
答案 1 :(得分:2)
对我来说,问题出在我的proxy_pass条目上。我有
shutdownNow
这导致上游请求使用IP4本地主机IP或IP6本地主机IP,但是每隔一段时间,它将使用没有端口号的本地主机DNS,导致上游错误,如下面的日志所示。
location / {
...
proxy_pass http://localhost:5001;
}
如您所见,我的“ localhost:”状态为502
将proxy_pass更改为127.0.0.1:5001意味着所有请求现在都通过端口使用IP4。
此StackOverflow响应对发现问题有很大帮助,因为它详细更改了日志格式以使您可以查看问题。