我对nginx有如下问题:
我的网站的峰值请求是30000req / sec,到nginx服务器的最大流量约为300Mbps,Nginx是代理http服务器。
有时用户通过nginx连接到我系统中的某个服务器,第一个连接连接到服务器的速度非常慢(> 10s),然后连接到服务器的下一个连接速度非常快(Nginx的配置如下:

user  nginx;
worker_processes  auto;
worker_rlimit_nofile 30000;
error_log  /storage/log/vn-fw/nginx/log/error.log warn;
pid        /var/run/nginx.pid;
events {
    worker_connections  10240;
    multi_accept on;
    use epoll;
}
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    proxy_pass_header Server;
    sendfile        on;
    keepalive_timeout  15;
    include /etc/nginx/conf.d/*.conf;
    tcp_nodelay on;
    tcp_nopush  on;

    client_body_buffer_size     1k;
    client_header_buffer_size   4k;
    client_max_body_size          5M;
    large_client_header_buffers 4 16k;
    proxy_buffers 8 16k;
    server_tokens off;
    gzip on;
    gzip_min_length 10240;
    gzip_proxied expired no-cache no-store private auth;
    gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml;
    gzip_disable "MSIE [1-6]\.";
}

和版本内核:

Linux vn-nginx2 2.6.18-348.3.1.el5#1 SMP Mon Mar 11 19:39:25 EDT 2013 x86_64 x86_64 x86_64 GNU / Linux

和内核版本

net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_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_builted = 86400
net.ipv4.tcp_window_scaling = 0

请帮助我解决此问题。
非常感谢你

最佳答案

根据内核版本,您拥有RHEL5,它带有过期的TCP / IP配置堆栈,并且TCP初始拥塞窗口设置为2/3。

您尝试通过net.ipv4.tcp_window_scaling = 0禁用它,这会导致意外行为,并且对性能没有帮助。在继续之前将其打开。而不是此,请注意tcp_wmem和tcp_rmem的值。

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


慢启动是TCP使用的拥塞控制策略的一部分,
许多Internet应用程序使用的数据传输协议。
慢启动与其他算法结合使用可避免
发送的数据超出了网络的传输能力,
就是为了避免引起网络拥塞。该算法由
RFC 5681。

慢启动最初从拥塞窗口大小(cwnd)为1开始
2或10。1拥塞窗口的值将随着
收到的每个确认,实际上使窗口大小加倍
每个往返时间...


如果我们尝试使用a diagram对此进行成像:

nginx - 首先通过Nginx连接慢-LMLPHP

在字节发送方面,我们可以这样显示:

nginx - 首先通过Nginx连接慢-LMLPHP

根据内核版本,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。* https://bugs.centos.org/view.php?id=6021的潜在问题。

也不要忘记在net.ipv4.tcp_slow_start_after_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

07-27 13:13