我的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
请帮我解决此问题。 非常感谢你
答案 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对此进行成像:
就发送的字节而言,我们可以像这样显示:
基于内核版本,您拥有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