背景
客户端发起请求 通过slb 给到nginx,然后nginx再给到后端,经常出现请求接口超时,nginx日志都没有问题(也就是给到nginx处理的请求都完成了),查看slb的流量,远远小于带宽(网络层面应该没有问题),所以问题应该在请求到达nginx操作系统层面。优化nginx在操作系统上面的请求。
worker_processes 8; 改为核心数
events {
use epoll;
worker_connections 65535;
multi_accept on; #可以一次建立多个连接
}
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
gzip on;
client_header_buffer_size 512k;
large_client_header_buffers 4 512k;
proxy_send_timeout 600;
proxy_read_timeout 600;
proxy_connect_timeout 600;
client_max_body_size 500m;
vim /etc/sysctl.conf
vm.swappiness = 0 kernel.sysrq = 1 net.ipv4.neigh.default.gc_stale_time = 120 # see details in https://help.aliyun.com/knowledge_detail/39428.html net.ipv4.conf.all.rp_filter = 0 net.ipv4.conf.default.rp_filter = 0 net.ipv4.conf.default.arp_announce = 2 net.ipv4.conf.lo.arp_announce = 2 net.ipv4.conf.all.arp_announce = 2 # see details in https://help.aliyun.com/knowledge_detail/41334.html net.ipv4.tcp_max_tw_buckets = 5000 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_synack_retries = 2 net.ipv6.conf.lo.disable_ipv6 = 1 net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 kernel.msgmnb = 65536 kernel.msgmax = 65536 net.core.wmem_default = 8388608 net.core.rmem_default = 8388608 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 net.core.somaxconn = 40960 net.ipv4.tcp_fin_timeout = 10 net.ipv4.tcp_keepalive_time = 150 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 0 net.ipv4.tcp_max_tw_buckets = 20000 net.ipv4.tcp_max_syn_backlog = 8096 net.ipv4.ip_local_port_range = 1024 65000
下面的命令 可能和上面的效果一样,直接运行
echo "0" > /proc/sys/net/ipv4/tcp_tw_recycle echo "0" > /proc/sys/net/ipv4/cp_timestamps sysctl -w net.ipv4.tcp_tw_recycle=0 sysctl -w net.ipv4.tcp_timestamps=0 net.ipv4.tcp_tw_recycle = 0
ulimit -a 这个也调整一下
原文:https://www.cnblogs.com/hxfcodelife/p/14762587.html