Nginx 静态文件服务配置及优化( 二 )


location /mp3 { tcp_nodelay on; keepalive_timeout 65; #...}优化积压队列
其中一个重要因素是 NGINX 可以多快地处理传入连接 。一般规则是在建立连接时,将其放入侦听套接字的 "listen" (监听)队列中 。在正常负载下,队列很小或根本没有队列 。但是在高负载下,队列会急剧增长,导致性能不均匀,连接中断,延迟增加 。
显示积压队列使用命令 netstat -Lan 来显示当前监听队列 。输出可能如下所示,它显示在端口 80上的监听队列中,有 10 个未接受的连接,这些连接针对配置的最多 128 个排队连接 。这种情况很正常 。
Current listen queue sizes (qlen/incqlen/maxqlen)Listen Local Address 0/0/128 *.12345 10/0/128 *.80 0/0/128 *.8080相反,在以下命令中,未接受的连接数(192)超过了 128 的限制 。当网站流量很大时,这种情况很常见 。要获得最佳性能,需要在操作系统和 NGINX 配置中增加可以排队等待 NGINX 接受的最大连接数 。
Current listen queue sizes (qlen/incqlen/maxqlen)Listen Local Address 0/0/128 *.12345 192/0/128 *.80 0/0/128 *.8080调整操作系统将 net.core.somaxconn 内核参数的值从其默认值(128)增加到足以容纳大量流量的值 。在这个例子中,它增加到 4096 。

  • FreeBSD 的命令为 sudo sysctl kern.ipc.somaxconn=4096
  • linux 的命令为 1. sudo sysctl -w net.core.somaxconn=4096 2. 将 net.core.somaxconn = 4096 加入到 /etc/sysctl.conf 文件中 。
调整 NGINX如果将 somaxconn 内核参数设置为大于 512 的值,请将 backlog 参数增加在 NGINX listen 指令以匹配修改:
server { listen 80 backlog=4096; # ...}© 文章翻译自 Nginx Serving Static Content,部分做了语义调整 。




推荐阅读