最近我们在清漆前添加了nginx以用于ssl卸载。 我们正在将所有的http请求重写为https。 但是后来我们发现,即使是由nginx提供的http调用,响应时间也有显着增加。 而没有nginx的同样的请求服务清漆响应时间快得多。
我调整了代理缓冲区(2048 4k),以便响应不会存储在文件中,并closures代理缓冲。 但是这两种方法都没有帮助。 所以我克隆了nginx服务器(虚拟机),并发出了相同的请求对克隆的。 响应时间与清漆相当。
所以看起来,当nginx负载(大约700个请求/秒)时,响应时间似乎会增加。
有人能告诉我,我错过了明显的东西吗?
这是我的nginxconfiguration
#nginx.conf worker_processes auto; worker_rlimit_nofile 90000; pid /var/run/nginx.pid; error_log /var/log/nginx/error.log error; events { worker_connections 40000; multi_accept on; use epoll; } http { ## # Basic Settings ## sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; client_max_body_size 20M; client_body_buffer_size 128k; server_tokens off; keepalive_requests 1000; reset_timedout_connection on; include /etc/nginx/mime.types; default_type application/octet-stream; ## # SSL common settings ## include /etc/nginx/include.d/ssl-common; ## # Logging Settings ## log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; log_format detailed '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent "$http_referer" ' '"$http_user_agent" $request_length $request_time ' '$upstream_response_length $upstream_response_time ' '$upstream_status'; log_format upstreamlog '[$time_local] $remote_addr - $remote_user - $server_name to: $upstream_addr: $status / upstream $upstream_status $request upstream_response_time $upstream_response_time msec $msec request_time $request_time body: $request_body'; log_format timed_combined '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '$upstream_connect_time $upstream_header_time ' '$request_time $upstream_response_time $pipe'; access_log off; ## # Gzip Settings ## gzip on; gzip_disable "msie6"; #Proxy config proxy_buffering on; proxy_buffers 56 4k; proxy_busy_buffers_size 8k; proxy_set_header Host $host; proxy_http_version 1.1; proxy_set_header Connection ""; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; ## # Virtual Host Configs ## include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; } #For a specific request I've increased the proxy buffer size proxy_buffers 2048 4k; proxy_buffer_size 4k; proxy_busy_buffers_size 8k; #Upstream setting keepalive 2000;
我甚至在sysctl.config中优化了tcp设置,这也没有帮助。 这是我的sysctl.config
#sysctl.config fs.file-max = 100000 net.ipv4.ip_local_port_range = 1024 65000 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 0 net.ipv4.tcp_slow_start_after_idle = 0 net.ipv4.tcp_fin_timeout = 15 net.ipv4.tcp_max_tw_buckets = 400000 net.ipv4.tcp_no_metrics_save = 1 net.ipv4.tcp_syn_retries = 2 net.ipv4.tcp_synack_retries = 2 net.ipv4.tcp_rmem = 4096 87380 16777216 net.ipv4.tcp_wmem = 4096 65536 16777216 net.ipv4.tcp_max_syn_backlog = 65536 net.core.somaxconn = 16384 net.core.netdev_max_backlog = 16384 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 vm.min_free_kbytes = 65536
这是磁盘IO的图表。 注意:Tcp连接统计我最近才添加它们,所以没有太多的信息。
Nginx_status – 显示请求和连接的graphics
错误日志中的任何内容?
最近有一个问题,系统用完了文件句柄,因为它正在缓冲每个请求,上游keepalive没有启用。 我不会想到你会从这些设置有这些问题。
不知道你的硬件是什么样子,但是700 SSL req / sa second很重,有没有iowait? CPU最大了吗? “keepalive_timeout 65”对于stream量级别看起来也很高,你可能会用完TCP连接。 我发现最好的结果约300 req / s是非常短,约1-3秒,但这将取决于你的负载。