nginx 长连接
来源:互联网 发布:合金装备5 幻痛 优化 编辑:程序博客网 时间:2024/05/05 01:10
Nginx目前的upstream连接建立和获取的机制如下图。Nginx会在一开始创建connection pool(进程间不共享,可以避免锁),提供给所有向前/后的连接。
如果要实现upstream长连接,则每个进程需要另外一个connection pool,里面都是长连接。一旦与后端服务器建立连接,则在当前请求连接结束之后不会立即关闭连接,而是把用完的连接保存在一个keepalive connection pool里面,以后每次需要建立向后连接的时候,只需要从这个连接池里面找,如果找到合适的连接的话,就可以直接来用这个连接,不需要重新创建socket或者发起connect()。这样既省下建立连接时在握手的时间消耗,又可以避免TCP连接的slow start。如果在keepalive连接池找不到合适的连接,那就按照原来的步骤重新建立连接。假设连接查找时间可以忽略不计,那么这种方法肯定是有益而无害的(当然,需要少量额外的内存)。
具体如何来设计这个keepalive connection pool,不同人有不同的选择。比如Nginx目前的第三方模块upstream keepalive(作者Maxim Dounin)使用了一个queue来做。因为upstream的服务器很可能是多个,所以可能当保持的连接数多的时候,查找的时间可能会较长。可以给每个upstream服务器都分配一个pool(queue),缩短查找时间。但是总体来说内存操作很快,影响不会很大。upstream keepalive模块目前只支持memcached,但是可以重用其代码来达到对http upstream的长连接。在upstream模块和反向代理(二)里面highlight了一些改动的地方。由于Nginx作者之前没有考虑upstream的长连接,所以在设计上要把http upstream keepalive模块化可能比较难,只能通过手动修改代码来做到。
编者按:本月初 Maxim Dounin,Nginx 最活跃的开发者之一,提交了 upstream keepalive patch,支持 http/fastcgi/memcached,除了减少和 upstream 的网络开销外,也意味着能反向代理 http chunked 响应了!搜狐技术部CMS组的同学进行了一个简单的测试:
---------- 已转发邮件 ----------
发件人: 韩孝冰
日期: 2011年8月8日 下午3:51
主题: HttpUpstreamKeepalive效果瞠目结舌
siege -c200 -b -t10M -lsiege.log -H"Accept-Encoding: gzip,deflate" -i -f urls.txt
siege的结果:
Lifting the server siege... done.
Transactions: 11125884 hits
Availability: 100.00 %
Elapsed time: 599.53 secs
Data transferred: 8139.93 MB
Response time: 0.01 secs
Transaction rate: 18557.68 trans/sec
Throughput: 13.58 MB/sec
Concurrency: 199.11
Successful transactions: 11125884
Failed transactions: 0
Longest transaction: 9.01
Shortest transaction: 0.00
对比之前的压测结果,tps提升了7倍,100%成功响应。并发达到参数设置的上限,预示可能还有提升空间。
链接占用也很稳定,部了nginx+memcached的那台机器,time_wait在60000左右,总链接数不找过64000。
netstat -at | awk '/^tcp/{a[$6]++}END{for(i in a ){printf("%s\t%d\n",i,a[i])}}'
TIME_WAIT 59830
FIN_WAIT1 59
FIN_WAIT2 1
ESTABLISHED 3255
SYN_RECV 35
LISTEN 10
- Nginx中的长连接
- nginx 长连接
- 长连接与nginx
- nginx长连接
- nginx长连接的问题
- nginx设置proxy_pass长连接
- nginx配置长连接---keepalive相关
- Nginx Upstream长连接平滑升级
- Nginx反向代理支持长连接
- nginx长连接keepalive与pipeline
- nginx之keepalive请求长连接复用率统计
- httpclient、Nginx、tomcat之间请求长连接一致问题
- 长连接
- 长连接
- 长连接
- 长连接
- 长连接
- 长连接
- DSP学习的三个阶段
- 不同浏览器的CSS3前缀
- 多线程模式之Master-Worker模式
- hpp文件介绍
- 一个简单的eclipse插件 hello eclipse
- nginx 长连接
- VS2008常用快捷键
- mysql 查询语句长度限制
- 织梦dedecms5.7系统会员列表标签(memberlist)详解
- 漫漫人生路,须悟空
- DNF是怎样一款游戏?
- http://blog.csdn.net/qiqiongran_luck/article/details/6889037
- android-2
- CentOS 6.5系统中iptables防火墙开放端口80 3306 22端口