服务器端连接数限制

参考资料

http://yaocoder.blog.51cto.com/2668309/1312821

  • C10K问题http://www.kegel.com/c10k.html(必须要读呀)
    • I/O frameworks
    • I/O strategies
    • limits on open filehandles
    • limits on threads
    • tips
      • zero-copy
      • sendfile
      • avoid small frames by using writev
      • some programs can benefit from using non-posix threads
      • cache
  • ulimit
    • /etc/security/limits.conf
  • 全局限制
    • /proc/sys/fs/file-nr
    • /etc/sysctl.conf
  • 服务器端和端口数限制65535无关
    • 端口号并不是并发量的限制
    • server最大tcp连接数

   

http://nginx.com/blog/http-keepalives-and-web-performance/

   

   

   

许多服务器都有并发链接数限制,比如,通常配置中,Apacher server能够处理150(workder)或者256(prework)条并发连接。而每一个HTTP keepalive连接(极可能是空闲的)占用一个并发槽,一旦所有的并发槽被占用,服务器将不再接受新的HTTP连接。

   

通常的解决方法是关闭keepalive或者限制到一个特别短的时间。

   

另外,许多服务器为每一个HTTP请求创建一个进程/线程,例如Appache。TCP连接所以非常轻量级的,而进程/线程要重的多,造成了资源的浪费:消耗内存、增加上下文切换开销,这种现象被称为"HTTP Heavy Lifting"。这种并发模型固有的限制了并发连接数。

服务器端连接数限制_第1张图片

   

测试中没有发现这种问题?

  • 客户端过少?
  • 没有使用keepalive?

   

如何解决这种问题

  • 增加进程/线程数
  • 禁止或者限制keepalive
  • 特殊的keepalive处理方式,比如Apache的Event multi-processing module
  • 使用更有效的处理模型
    • 最简单和有效的方式就是增加一个高效的HTTP proxy,比如Nginx
    • 在web server/application server使用异步处理

   

Nginx的请求处理模型

服务器端连接数限制_第2张图片

   

使用Nginx作为Http Proxy,极大程度减少了web server/application server的连接负担

服务器端连接数限制_第3张图片

   

使用Nginx作为Proxy的好处

  • 高效的资源利用率,web/application server没有了http连接的负担,能够处理更多的事务
  • 降低Http timeout的概率
  • 改善用户体验:http timeout、请求处理速度

   

   

   

   

你可能感兴趣的:(Web)