我正在托管ruby应用程序,但它在处理每秒超过400个请求时会出错(某种错误500)。具有较少请求(低于400请求)的测试(loader.io)结束,结果良好。 我想我可以在处理500个请求/秒以上时获得更好的结果。
该应用程序正在使用t2.2xlarge ec2实例(具有32Gb内存,8个虚拟内核)。我想这可能会带来更好的表现。该机器在Ubuntu 14.04,Rails 4.0.12,Nginx和Passenger上运行。
我尝试在Nginx配置中进行一些更改,但没有任何重大进展。 我目前的配置:
passenger_max_pool_size 60;
#passenger_pool_idle_time 20;
server {
listen 80;
return 301 https://mydomain.eu$request_uri;
}
server {
listen 443;
server_name ~^(\w+)\.mydomain.eu$;
return 301 https://mydomain.eu$request_uri;
}
server {
listen 443 ssl spdy default;
server_name mydomain.eu;
passenger_enabled on;
#passenger_max_pool_size 12;
passenger_max_request_queue_size 2000;
gzip on;
root /home/ubuntu/application/cversion/public;
ssl on;
ssl_certificate /home/ubuntu/fvhsdvhfd35/ssl-bundle1.crt;
ssl_certificate_key /home/ubuntu/fvhsdvhfd35/prvt.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 SSLv3;
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";
ssl_prefer_server_ciphers on;
location = /favicon.png {
expires max;
add_header Cache-Control public;
}
location = /ZeroClipboard.swf {
expires max;
add_header Cache-Control public;
}
location ~ ^/(assets)/ {
gzip_static on;
expires max;
add_header Cache-Control public;
}
# disable gzip on all omniauth paths to prevent BREACH
location ~ ^/auth/ {
gzip off;
passenger_enabled on;
}
您是否知道如何每秒获得超过400个请求?
此处是Nginx与Passenger的日志,同时处理500个请求( passenger_max_pool_size 30; 和 passenger_max_request_queue_size 1200; )
2017/07/06 01:58:32 [error] 11749#11749: *56391 connect() to unix:/tmp/passenger.e1PiPXp/agents.s/core failed (11: Resource temporarily unavailable) while connecting to upstream, client: 54.89.44.6, server: mydomain.us, request: "GET / HTTP/1.1", upstream: "passenger:unix:/tmp/passenger.e1PiPXp/agents.s/core:", host: "mydomain.us"
2017/07/06 01:58:32 [error] 11740#11740: *64104 connect() to unix:/tmp/passenger.e1PiPXp/agents.s/core failed (11: Resource temporarily unavailable) while connecting to upstream, client: 52.87.219.148, server: mydomain.us, request: "GET / HTTP/1.1", upstream: "passenger:unix:/tmp/passenger.e1PiPXp/agents.s/core:", host: "mydomain.us"
2017/07/06 01:58:32 [error] 11749#11749: *64251 connect() to unix:/tmp/passenger.e1PiPXp/agents.s/core failed (11: Resource temporarily unavailable) while connecting to upstream, client: 52.87.219.148, server: mydomain.us, request: "GET / HTTP/1.1", upstream: "passenger:unix:/tmp/passenger.e1PiPXp/agents.s/core:", host: "mydomain.us"
2017/07/06 01:58:32 [error] 11749#11749: *63289 connect() to unix:/tmp/passenger.e1PiPXp/agents.s/core failed (11: Resource temporarily unavailable) while connecting to upstream, client: 54.89.44.6, server: mydomain.us, request: "GET / HTTP/1.1", upstream: "passenger:unix:/tmp/passenger.e1PiPXp/agents.s/core:", host: "mydomain.us"
2017/07/06 01:58:32 [error] 11748#11748: *67786 connect() to unix:/tmp/passenger.e1PiPXp/agents.s/core failed (11: Resource temporarily unavailable) while connecting to upstream, client: 52.86.198.91, server: mydomain.us, request: "GET / HTTP/1.1", upstream: "passenger:unix:/tmp/passenger.e1PiPXp/agents.s/core:", host: "mydomain.us"
2017/07/06 01:58:32 [error] 11748#11748: *35057 connect() to unix:/tmp/passenger.e1PiPXp/agents.s/core failed (11: Resource temporarily unavailable) while connecting to upstream, client: 52.86.198.91, server: mydomain.us, request: "GET / HTTP/1.1", upstream: "passenger:unix:/tmp/passenger.e1PiPXp/agents.s/core:", host: "mydomain.us"
2017/07/06 01:58:32 [error] 11748#11748: *35166 connect() to unix:/tmp/passenger.e1PiPXp/agents.s/core failed (11: Resource temporarily unavailable) while connecting to upstream, client: 52.86.198.91, server: mydomain.us, request: "GET / HTTP/1.1", upstream: "passenger:unix:/tmp/passenger.e1PiPXp/agents.s/core:", host: "mydomain.us"
2017/07/06 01:58:32 [error] 11744#11744: *43208 connect() to unix:/tmp/passenger.e1PiPXp/agents.s/core failed (11: Resource temporarily unavailable) while connecting to upstream, client: 52.86.198.91, server: mydomain.us, request: "GET / HTTP/1.1", upstream: "passenger:unix:/tmp/passenger.e1PiPXp/agents.s/core:", host: "mydomain.us"
2017/07/06 01:58:32 [error] 11744#11744: *69130 connect() to unix:/tmp/passenger.e1PiPXp/agents.s/core failed (11: Resource temporarily unavailable) while connecting to upstream, client: 54.162.105.71, server: mydomain.us, request: "GET / HTTP/1.1", upstream: "passenger:unix:/tmp/passenger.e1PiPXp/agents.s/core:", host: "mydomain.us"
[ 2017-07-06 01:58:34.3865 11703/7fc703fff700 Ser/AcceptLoadBalancer.h:150 ]: Resuming accepting new clients
我有一个解决方案。 Nginx配置的这些更改为我提供了1000个请求/秒的性能。
起初我把:
"65536" in /proc/sys/net/core/somaxconn
"65536" in /proc/sys/net/ipv4/tcp_max_syn_backlog
/etc/nginx/conf.d/m.conf:
passenger_max_pool_size 90;
passenger_socket_backlog 16384;
#in server block
#was listen 443 ssl spdy default;
listen 443 ssl spdy default backlog=16384;
passenger_max_request_queue_size 2300;
ssl_session_cache shared:SSL:10m;
/etc/nginx/nginx.conf:
worker_rlimit_nofile 131072;
#in events block:
use epoll;
worker_connections 8192;
在1分钟的测试期间,每秒1000个请求的平均响应时间约为6秒。任何想法如何改善这一数量的请求的平均响应时间?
我根据this博客更改了我的Nginx配置以启用Nginx Microcashing,但我没有更好的表现。 500 req /秒给了我平均响应时间5.1秒。约900 req / sec - 5.5sec。但是,如果没有缓存,我有500秒的500秒请求和5.6秒900的请求。
/etc/nginx/nginx.conf:
...
http {
...
proxy_cache_path /tmp/cache keys_zone=one:10m levels=1:2 inactive=600s max_size=100m;
...
}
/etc/nginx/conf.d/m.conf:
}
passenger_max_pool_size 90;
#passenger_pool_idle_time 20;
passenger_socket_backlog 16384;
server {
listen 80;
return 301 https://mydomain.eu$request_uri;
}
server {
listen 443;
server_name ~^(\w+)\.mydomain.eu$;
return 301 https://mydomain.eu$request_uri;
}
server {
listen 443 ssl spdy default backlog=16384;
server_name mydomain.eu;
ssl on;
ssl_certificate /home/ubuntu/fvhsdvhfd35/ssl-bundle1.crt;
ssl_certificate_key /home/ubuntu/fvhsdvhfd35/prvt.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 SSLv3;
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
location / {
proxy_http_version 1.1; # Always upgrade to HTTP/1.1
proxy_set_header Connection ""; # Enable keepalives
proxy_set_header Accept-Encoding ""; # Optimize encoding
proxy_pass http://127.0.0.1:81/;
proxy_cache one;
proxy_cache_lock on;
proxy_cache_valid 200 1s;
proxy_cache_use_stale updating;
}
}
server {
listen 81;
server_name mydomain.eu;
passenger_enabled on;
passenger_max_request_queue_size 2300;
gzip on;
root /home/ubuntu/application/cversion/public;
location = /favicon.png {
expires max;
add_header Cache-Control public;
}
location = /ZeroClipboard.swf {
expires max;
add_header Cache-Control public;
}
location ~ ^/(assets)/ {
gzip_static on;
expires max;
add_header Cache-Control public;
}
# disable gzip on all omniauth paths to prevent BREACH
location ~ ^/auth/ {
gzip off;
passenger_enabled on;
}
}
答案 0 :(得分:2)
为了进行这些优化,请确保引用链接nginx blog,并考虑每个请求的响应时间(尽可能少地使用rails技术)。还要考虑数据库优化,即同时使用正确的索引和最大数据库连接数。由于这是一个多层次的问题,因此必须在每个级别进行配置以获得最佳性能。祝你好运:)
答案 1 :(得分:1)
可以根据官方性能调整建议审核Nginx配置:https://www.nginx.com/blog/tuning-nginx/