关于KeepAlive字段

转载 2012年03月31日 16:01:11

首先就看一下KeepAlive出现的原因吧: 
当一个客户端向服务器发送http请求时,两者之间会建立一个tcp连接,然后服务器发回响应信息同时关闭连接。如果请求的的页面中含有别的资源连接,比如图片、flsah等,就会再次创建连接。KeepAlive的作用就是在第一次创建连接时,服务器会把这个tcp连接保持一段时间(服务器端会有一个 keepaliveTime的最大时间,超过时间就断开连接)。这样就不会频繁的去建立tcp连接,同一次请求中的信息传递都可以使用同一个tcp连接。 

KeepAlive
的工作原理: 
HTTP1.0HTTP1.1协议中都有对KeepAlive的支持。其中HTTP1.0需要在request中增加“Connectionkeep-alive” header才能够支持,而HTTP1.1默认支持。(大家可以利用抓包工具看一下) 
HTTP1.0 KeepAlive
支持的数据交互流程如下: 
a)Client
发出request,其中该requestHTTP版本号为1.0。同是在request中包含一个header“Connection keep-alive” 
b)Web Server
收到request中的HTTP协议为1.0“Connectionkeep-alive”就认为是一个长连接请求,其将在responseheader中也增加“Connection keep-alive”。同是不会关闭已建立的tcp连接。 
c)Client
收到Web Serverresponse中包含“Connection keep-alive”,就认为是一个长连接,不closetcp连接。并用该tcp连接再发送request。(跳转到a) 
HTTP1.1 KeepAlive
支持的数据交互流程如下: 
a)Client
发出request,其中该requestHTTP版本号为1.1 
b)Web Server
收到request中的HTTP协议为1.1就认为是一个长连接请求,其将在responseheader中也增加“Connection keep-alive”。同是不会关闭已建立的tcp连接。 
c)Client
收到Web Serverresponse中包含“Connection keep-alive”,就认为是一个长连接,不closetcp连接。并用该tcp连接再发送request。(跳转到a) 

关于KeepAlive的分析: 
现在的一些服务器都可以设置KeepAlive是否开启,以及KeepAlive的超时时间,服务器支持的KeepAlive数量(数量一般不会很大,否则会对服务器产生很大的压力)。 
那么我们考虑3种情况: 
1、用户浏览一个网页时,除了网页本身外,还引用了多个 javascript 文件,多个 css 文件,多个图片文件,并且这些文件都在同一个 HTTP 服务器上。 
2、用户浏览一个网页时,除了网页本身外,还引用一个 javascript 文件,一个图片文件。 
3、用户浏览的是一个动态网页,由程序即时生成内容,并且不引用其他内容。 
对于上面3中情况,1 最适合打开KeepAlive 2 随意,3 最适合关闭KeepAlive 
KeepAlive 后,意味着每次用户完成全部访问后,都要保持一定时间后才关闭会关闭 TCP 连接,那么在关闭连接之前,必然会有一个服务器进程对应于该用户而不能处理其他用户,假设KeepAlive 的超时时间为 10 秒种,服务器每秒处理 50 个独立用户访问,那么系统中 Apache 的总进程数就是 10 * 50 500 个,如果一个进程占用 4M 内存,那么总共会消耗 2G 内存,所以可以看出,在这种配置中,相当消耗内存,但好处是系统只处理了 50 TCP 的握手和关闭操作。 
如果关闭 KeepAlive,如果还是每秒50个用户访问,如果用户每次连续的请求数为3个,那么 Apache 的总进程数就是 50 * 3= 150 个,如果还是每个进程占用 4M 内存,那么总的内存消耗为 600M,这种配置能节省大量内存,但是,系统处理了 150 TCP 的握手和关闭的操作,因此又会多消耗一些 CPU 资源。 

 

 

 

 

 

 

 

 

   
   
   
   
   
   
   
   
   
   
   
   
   

keepalive—VRRP协议介绍

1. 前言 VRRP(Virtual Router Redundancy Protocol)协议是用于实现路由器冗余的协议,最新协议在RFC3768中定义,原来的定义RFC2338被废除,新协议相对...
  • DBAdream
  • DBAdream
  • 2015年02月03日 16:58
  • 1082

Nginx之——Nginx+Keepalive 实现高可用负载均衡方案

主nginx负载均衡器:192.168.0.99  (通过keepalived配置了VIP:192.168.0.101供外使用) 副nginx负载均衡器:192.168.0.100 (通过keepal...
  • l1028386804
  • l1028386804
  • 2016年09月18日 21:15
  • 3225

长连接和Keepalive详解

TCP协议中有长连接和短连接之分。短连接在数据包发送完成后就会自己断开,长连接在发包完毕后,会在一定的时间内保持连接,即我们通常所说的Keepalive(存活定时器)功能。 默认的Keepalive...
  • huangjin0507
  • huangjin0507
  • 2016年09月01日 09:58
  • 1307

keepalive + Nginx实现高可用性及负载均衡

目录[-] 1. 安装Keeplived依赖 2. 安装Keepalived 3. 配置Keepalived 4. 运行Keepalived 5. 总结 前几天使用了Heartbeat作为高...
  • death_kada
  • death_kada
  • 2015年11月04日 11:56
  • 1243

Linux操作系统下TCP keepalive属性查看

Tcp是面向连接的,在实际应用中通常都需要检测连接是否还可用.如果不可用,可分为: a. 连接的对端正常关闭. b. 连接的对端非正常关闭,这包括对端设备掉电,程序崩溃,网络被中断等.这种情况是不...
  • u011839461
  • u011839461
  • 2013年09月26日 15:10
  • 1472

nginx优化——包括https、keepalive等

nginx优化——包括https、keepalive等 一、nginx之tcp_nopush、tcp_nodelay、sendfile 1、TCP_NODELAY 你怎么可以强制...
  • Dream_Flying_BJ
  • Dream_Flying_BJ
  • 2017年01月24日 18:15
  • 4834

nginx+keepalive实现高可用负载均衡

一:实验环境 主nginx负载均衡器:10.192.203.201  (通过keepalived配置了VIP:10.192.203.106供外使用) 副nginx负载均衡器:10.192.203. 1...
  • YABIGNSHI
  • YABIGNSHI
  • 2016年07月26日 18:21
  • 9643

谈谈keepalive,长连接与短连接

短连接的意义: 1.节省负载均衡设备资源,每一个TCP/UDP的链接都会在负载均衡设备上创建一个Session的结构, 链接如果一直不断开,这种Session结构信息最终会消耗掉所有的资源,所以必须...
  • mhpmii
  • mhpmii
  • 2014年09月09日 00:54
  • 2971

keepalive配置mysql自动故障转移

1、keepalive安装 分别在master,slave上安装keepalive cd /usr/local/src wget http://www.keepalived.org/softwar...
  • YABIGNSHI
  • YABIGNSHI
  • 2016年02月29日 02:16
  • 2357

keepalive安装配置

环境准备  系统需要的 LINUX 版本为:2.6.9‐5.ELsmp   需要的keepalived 版本为:1.1.20  ?  检查 LINUX版本 [root@test01 etc]# ...
  • bigtree_3721
  • bigtree_3721
  • 2016年04月07日 01:07
  • 1068
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于KeepAlive字段
举报原因:
原因补充:

(最多只允许输入30个字)