我们无法在nginx中处理超过3k个并发请求(Connecton超时)。 我们也将ulimit更改为20000.以下是我的nginx.conf和sysctl.conf文件:
user www-data; worker_processes 4; pid /var/run/nginx.pid; events { worker_connections 5000; use epoll; # multi_accept on; } # took it in next line worker_rlimit_nofile 100000; http { sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 600; send_timeout 600; proxy_connect_timeout 600; proxy_send_timeout 600; proxy_read_timeout 600; reset_timedout_connection on; types_hash_max_size 2048; client_header_buffer_size 5k; open_file_cache max=10000 inactive=30s; open_file_cache_valid 60s; open_file_cache_min_uses 2; open_file_cache_errors on; include /etc/nginx/mime.types; default_type application/octet-stream; access_log off; error_log /var/log/nginx/error.log; gzip on; gzip_disable "msie6"; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; }
systel.conf
# Increase size of file handles and inode cache fs.file-max = 2097152 # Do less swapping vm.swappiness = 10 vm.dirty_ratio = 60 vm.dirty_background_ratio = 2 ### GENERAL NETWORK SECURITY OPTIONS ### # Number of times SYNACKs for passive TCP connection. net.ipv4.tcp_synack_retries = 2 # Allowed local port range net.ipv4.ip_local_port_range = 2000 65535 # Protect Against TCP Time-Wait net.ipv4.tcp_rfc1337 = 1 # Decrease the time default value for tcp_fin_timeout connection net.ipv4.tcp_fin_timeout = 15 # Decrease the time default value for connections to keep alive net.ipv4.tcp_keepalive_time = 300 net.ipv4.tcp_keepalive_probes = 5 net.ipv4.tcp_keepalive_intvl = 15 ### TUNING NETWORK PERFORMANCE ### # Default Socket Receive Buffer net.core.rmem_default = 31457280 # Maximum Socket Receive Buffer net.core.rmem_max = 12582912 # Default Socket Send Buffer net.core.wmem_default = 31457280 # Maximum Socket Send Buffer net.core.wmem_max = 12582912 # Increase number of incoming connections net.core.somaxconn = 65536 # Increase number of incoming connections backlog net.core.netdev_max_backlog = 65536 # Increase the maximum amount of option memory buffers net.core.optmem_max = 25165824 # Increase the maximum total buffer-space allocatable # This is measured in units of pages (4096 bytes) net.ipv4.tcp_mem = 65536 131072 262144 net.ipv4.udp_mem = 65536 131072 262144 # Increase the read-buffer space allocatable net.ipv4.tcp_rmem = 8192 87380 16777216 net.ipv4.udp_rmem_min = 16384 # Increase the write-buffer-space allocatable net.ipv4.tcp_wmem = 8192 65536 16777216 net.ipv4.udp_wmem_min = 16384 # Increase the tcp-time-wait buckets pool size to prevent simple DOS attacks net.ipv4.tcp_max_tw_buckets = 1440000 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_tw_reuse = 1
我们使用4个CPU和8 GB RAM的Ubuntu操作系统。 我几乎看不到任何CPU和RAM的使用情况。 我只是触发nginx默认页面的URL。
我强烈build议你使用微caching。
例如: http : //www.howtoforge.com/why-you-should-always-use-nginx-with-microcaching http://reviewsignal.com/blog/2014/06/25/40-million-hits-a -day-上的wordpress-使用-A-10-VPS /
我最近在我的盒子上设置了微型caching。 有了apache基准testing,它可以容纳多达50 000个连接,CPU只能达到6%。 没有超时,页面在1毫秒内送达。
上面的示例手册我build议只用于“仅查看”,因为它们不正确。 在我的情况下,我花了很多时间来设置这个,但这是值得的压力:)
你提到你设置用户文件的限制为20000,但不是如何..
在Ubuntu上,你可以改变/etc/security/limits.conf的硬性和软性限制假设正在运行nginx的用户是www-data ,那么你只需要在文件的末尾加上:
www-data soft nofile 100000 www-data hard nofile 120000 www-data soft nproc 100000 www-data hard nproc 120000
如果你想检查你的当前限制运行的是什么:
su - www-data ulimit -Hn ulimit -Sn