慢速首先通过nginx连接

时间:2015-08-20 09:40:22

标签: nginx

我的nginx问题如下: 我的网站有峰值请求是30000req / sec和nginx服务器的最大流量~300Mbps,Nginx是代理http服务器。 有时用户通过nginx连接到我系统中的某个服务器,第一个连接是verys slow(> 10s)连接到服务器,然后连接到服务器,下一个连接非常快(< 1s) 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_established = 86400

     

net.ipv4.tcp_window_scaling = 0

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

1 个答案:

答案 0 :(得分:1)

根据内核版本,你有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对此进行成像:

enter image description here

就发送的字节而言,我们可以像这样显示:

enter image description here

基于内核版本,您拥有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