Posts Tagged ‘ 持久连接 ’

IIS,连接数,进程数

国内卖虚拟主机的基本都有一项参数IIS数,而大部分人买虚拟主机的时候也会问主机商,你们的iis数是多少。而且IIS数被作为虚拟主机的一个非常重要的参数。但是奇怪的是,几乎所有的主机商的网站都没有解释IIS数是什么东西。网上流传着一篇很常见的讲解IIS数的文章,几乎和在线人数等同起来(只是框架会多占IIS数),还解释了你的论坛的在线人数为什么达不到虚拟主机的IIS数。正式因为广泛的误解,还有就是很多新手不明白在线人数是怎么回事,甚至很多人就把discuz论坛看到的在线人数和iis等同起来。如果有这样的误解,买空间的时候就会很郁闷了,例如很多空间的iis是50,但是我的论坛可是1000人在线啊,那怎么办啊!可能是出于无奈,主机商的iis越来越大,甚至出来很多不限制iis数的虚拟主机。

要消除误解就要从头说起,结果发现麻烦来了,IIS是什么东西?IIS不就是微软发布的服务器吗,那IIS数是什么,装了多少了IIS服务器?经过查询微软的技术文档,确切的说法应该是IIS并发连接数。但是很多卖虚拟主机的,服务器是apache,怎么也写着IIS数多少,是不是应该写Apache数呢?哈哈,很多人都被搞晕掉了吧,其实站长们就是这样被主机商给搞晕了。。。

这种说法的根源还是来自于windows和iis,iis的并发连接数估计说起来太烦,干脆简称IIS数甚至iis了。关于IIS的并发数,前一段时间看过一些微软的文档,但是因为我不用IIS,也没记住多少,就不继续讨论了,大家到这里只要知道iis数是什么东西就可以了。

web服务器不只是IIS,或者可以这样说,web服务器里IIS算不上主流,国内之所以这么多人卖的服务器都是iis的,我想原因有几个,一个是盗版用习惯了,还有一个更重要的,懂linux和apache的人太少了,所以在早期,国内的虚拟主机市场想找个apache服务器的都难。记得当年,遍地都是ASP的建站程序,到处都是asp空间,找个php的难啊,不过现在已经有很大改观了。

接着说我们的正题,对于apache服务器,再说他的iis数是多少,是不是不伦不类呢?那么应该叫什么呢?我发现,不少主机商现在不写IIS数了,写成并发连接数了,但是因为误解,很多人就把并发连接数和IIS数等同起来,然后和在线人数扯上关系。下面我们分析下apache下这个到底是什么东西?

说起来还要搞清楚两个名词才好继续说,一个是连接数,一个是进程数。准确的定义我也说不好,但是连接数一般指的是tcp连接,这个是linux操作系统的限制,apache没找到对这个的限制,所以我们重点说apache进程数(httpd进程数),其实主机商限制的就是这个,大部分人说的连接数指的也是这个,但是容易让人误解。

首先简单说一下过程,当你访问一个页面的时候,你的浏览器就和服务器建立一个tcp连接,然后apache的一个进程来处理你的请求。访问一个页面可能有多个请求,一般来说页面里的每个文件都对应一个请求,例如一个图片,css文件,js文件。所以访问一个页面会发出多个请求。如果服务器支持持久连接,那么一个连接就可以处理所有请求(在超时时间之内),如果服务器不支持持久连接,那么每一个请求都需要建立一个新的tcp连接。对于前一种情况,apache有一个进程来处理,但是这个进程处理完之后要保留一段时间,以便处理其他请求,直到连接断开;对于后面一种情况,apache完成一个请求之后就终止进程,新的请求建立新的进程。(实际上根据配置,一般有一些闲置的进程,不过我们为了方便的说明问题,不考虑那么多情况)

一般的服务器设置都是支持持久连接的,也就是参数KeepAlive处于启用状态。影响最大进程数的主要配置有:

MaxClient (为了不把大家搞晕,我们只考虑非线程型的MPM(也就是prefork),MaxClients表示可以用于伺服客户端请求的最大子进程数量)

KeepAliveTimeout Apache在关闭持久连接前等待下一个请求的秒数

第一个参数就是进程数的限制,第二个参数表示你的浏览器和apache建立持久连接以后,等待多久断开连接,一般默认的是5s,也就是说,如果5s钟你的浏览器没有发新的请求,服务器就断开与你的持久连接了。而一个持久连接占用一个进程,至于框架会不会占用额外的进程,没搞明白。

进程数可以用下面的公式计算: 总Apache进程数 = KeepAliveTimeout * 每秒种HTTP请求数 / 平均KeepAlive请求

而HTTP请求数就对应日志文件中的请求数(点击数)。

下面我们来做一个估算,假设一种极端的访问情况:浏览器打开一个页面以后不再继续访问其他页面,一直等到服务器断开连接。也就是说一个持久连接对应一个pv,等待5秒钟。对于大部分的页面,服务器执行时间是可以忽略的,也就是近似于一个pv占用5s时间。假设服务器的进程数限制是50个,那么5s可以有50个pv,一天可以有多少pv呢?计算很容易,结果是86万次,每个小时36000.也就是说,进程数限制50,对于大部分的普通网站应用都足够了。

当然实际情况会很复杂,主要有几方面,可能连续访问页面,也就是一个持久连接产生多个pv,这个会增加可承受的pv量;访问量分布不均匀,某些时间段大;一个请求花费的时间很长,例如在线看电影,下载软件;同时发起多个连接,这个影响多大正在查资料和实际观察。

最后总结一下,iis数或者更准确的说apache进程数和在线人数相关性不大,如果要找一个准确的参数,应该是日志中的点击数。在线人数最不靠谱,如果关心这个,请查看服务器的活跃连接,这个才是真的“在线”的人;独立IP数次之,也不靠谱,因为不知道每人访问多少页面,每个页面多少请求;PV数已经很接近了,但是不确定性还是很大。

别用discuz的在线人数衡量服务器的负载,尤其是在你都不知道站长设了多久的时间的时候,很多站长为了好看,在线时间有设置一个月的,其实那些人都不知道“死”了多久了。即使是设置的15分钟,看了上面的分析,你也清楚不确定性有多大了。

关于本文:虽然做网站很久,但是真真接触apache服务器的时间不长,文中可能有不少错误,也有不少忽略了其他设置,只关注几个最主要的参数。如果您发现哪里有错误,请告知我。这个不是技术文章,只是想让买空间的站长了解一下,别被误导。IIS我不熟悉,关于IIS的并发连接数等我熟悉之后再说,不过有一点是确定的,不会把超时时间设置为15分钟,这个要是遇到ddos就挂定了。

大漠孤狼原创(www.83blog.com),转载请注明。

Post Footer automatically generated by wp-posturl plugin for wordpress.

February 2nd, 2009  in 服务器技术 10 Comments »