通过nginx进行慢速第一次连接

通过nginx进行慢速第一次连接,nginx,Nginx,我对nginx有如下问题: 我的网站的峰值请求是30000req/秒,到nginx服务器的最大流量约为300Mbps,nginx是代理http服务器。 有时用户通过nginx连接到我系统中的某个服务器,第一个连接非常慢(>10s)以连接到服务器,然后连接到服务器下一个连接非常快(根据内核版本,您有RHEL5,它带有过时的TCP/IP配置堆栈,TCP初始拥塞窗口设置为2/3 您试图通过net.ipv4.tcp\u window\u scaling=0禁用它,这会导致意外行为,对性能没有帮助。请在继

我对nginx有如下问题: 我的网站的峰值请求是30000req/秒,到nginx服务器的最大流量约为300Mbps,nginx是代理http服务器。
有时用户通过nginx连接到我系统中的某个服务器,第一个连接非常慢(>10s)以连接到服务器,然后连接到服务器下一个连接非常快(根据内核版本,您有RHEL5,它带有过时的TCP/IP配置堆栈,TCP初始拥塞窗口设置为2/3

您试图通过net.ipv4.tcp\u window\u scaling=0禁用它,这会导致意外行为,对性能没有帮助。请在继续之前打开它。除此之外,请注意tcp\u wmemtcp\u rmem的值

让我们看看什么是TCP拥塞窗口以及它是如何工作的

慢启动是TCP使用的拥塞控制策略的一部分,TCP 许多互联网应用程序使用的数据传输协议。 慢启动与其他算法结合使用,以避免 发送超过网络传输能力的数据 是,以避免造成网络拥塞。算法由 RFC5681

慢启动首先从拥塞窗口大小(cwnd)为1开始, 2或10.拥塞窗口的值将随着 每次收到确认后,窗口的大小实际上增加了一倍 每次往返时间

如果我们尝试用以下方式来想象这一点:

根据发送的字节数,我们可以这样显示:

根据内核版本,TCP拥塞窗口的值为2/3,在RHEL 6.2中默认增加到10

在Red Hat Enterprise Linux 6.2中,TCP初始拥塞窗口 根据RFC 5681,默认值现在设置为10 TCP和CCID-2通用的初始窗口代码已合并

所以问题仍然悬而未决,怎么办?答案很简单:升级内核(推荐)或调整窗口值:

ip route change default via `ip route| awk '/^def/{print $3}'` dev eth1 initcwnd 10 initrwnd 10
请注意正确设置接口,接口可以是eth0或不同的接口。系统重新启动后,该值会重置,因此请确保在引导时通过rc.local进行设置。在此之前,请注意内核2.6的潜在问题。*

也不要忘记,窗口在一定的时间间隔内会缩小,时间间隔由net.ipv4.tcp\u slow\u start\u-after\u-idle值控制

echo "
net.ipv4.tcp_slow_start_after_idle = 0
net.ipv4.tcp_wmem = 4096  87380 16777216
net.ipv4.tcp_rmem = 4096  87380 16777216
" >> /etc/sysctl.conf

TCP慢启动?内核版本是什么?内核版本:Linux vn-nginx2 2.6.18-348.3.1.el5#1 SMP Mon Mar 11 19:39:25 EDT 2013 x86_64 x86_64_64 GNU/Linux。内核配置:net.ipv4.ip_forward=0 net.ipv4.conf.default.rp_filter=1 net.ipv4.conf.default.accept_source\u route=0 kernel.sysrq=0 kernel.core\u使用pid=1 net.ipv4.TCP_syncookies=1 kernel.msgmnb=65536 kernel.msgmax=65536 kernel.shmmax=68719476736 kernel.shmall=4294967296 net.ipv4.ip_conntrack_max=393216 net.ipv4.tcp_tw_recycle=1 net.ipv4.tcp_tw_reuse=1 net.ipv4.netfilter.ip_conntrack_tcp_timeout_ded=86400您解决问题了吗?我正在更新到cent6.7。请再次检查甚至可以升级到CentOS 6.7?
echo "
net.ipv4.tcp_slow_start_after_idle = 0
net.ipv4.tcp_wmem = 4096  87380 16777216
net.ipv4.tcp_rmem = 4096  87380 16777216
" >> /etc/sysctl.conf