首页 > 代码库 > 提高 SharePoint 页面访问速度之应用池预加载

提高 SharePoint 页面访问速度之应用池预加载

之前我的一篇文章给大家粗略的讲了一下关于 IIS应用池回收给 SharePoint 带来的访问速度的提升,

详见 http://horse87.blog.51cto.com/2633686/1895153

前几天和几位MVP一起又讨论学习了一下关于IIS应用池的回收问题,今天来给大家再铺开来讲一讲。

简单来说,我么服务器IIS中的应用程序池,可以看做是一个网站的资源边界,当网站要与系统资源发生交互的时候,实际上会通过应用程序池,再由池子去请求系统资源,分配给网站,一个网站所能使用到的系统资源可以通过池子来进行控制。

我们大家可以这样理解,网站本身是静态存在的,但是应用池是动态的。 池子里面包括了:网站所占用的进程,内存虚拟地址,会话状态等,这些内容都是保存在池子里面。通过应用池可以对一个网站进行合理的资源管控。比如,当一个网站的CPU使用达到了某个峰值,内存使用达到了某个峰值,或者到了某个请求数,就把这个应用池进行回收。

我们其实可以稍微屡一下思路,当我们访问一个网站的时候,实际上是去访问了一个IIS的网站集,这个时候IIS会通知这个池子,“现在有人来 访问你了”,然后池子会启动一个W3WP的进程,由这个进程来负责处理用户与网站的交互。在IIS ASP.NET应用程序里面, 应用程序池会要求定期做回收,要做回收的目的,其实就是为了防止一个池子过多的占用系统资源。

有时候代码没有写好,长时间不回收池子,是会导致网站进入假死状态的。因此,IIS应用池回收是一定要做的。但是回收了,也意味着之前这个池子缓存的内容,以及内存中的状态,都会被清理掉,应用程序池回收,相当于是给电脑来了一次重启,或者说是重启了IIS。

说到电脑重启,大家都知道,重启之后刚启动起来,那个速度也是很慢的,过阵子等系统后台进程都启动起来了,就好了。IIS应用程序池回收也是这个道理。为什么有时候第一次访问SharePoint会很慢,及时因为SP所在的IIS池子刚刚经过回收,W3WP进程还没有启动起来,所以第一次访问,会有一个启动W3WP进程的过程,相当于要给SharePoint重新开机一次。

SharePoint这个应用程序比较大,有很多个池子,如果按照Technet上的建议,每一个SP里面的service application 都创建一个独立的池子,那这个数量可想而知。所以有时候大家早上第一次访问,会非常的慢,就是因为后台正从休眠状态中苏醒过来,初始化W3WP这个进程。

从IIS7开始,微软就推出了集中优化的方案,用来解决应用池回收的问题。

首先,应用程序池回首之后为什么会访问慢,是因为要初始化W3WP这个进程,让它干活,所以默认情况下,一个池子回收之后,如果没人访问,W3WP是不会启动的,除非有人访问它,唤醒池子,才会启动W3WP,之后如果再有人访问,那么速度就要快一些了。

微软为了解决这个问题,推出了应用程序池和网站预加载功能。什么叫预加载呢?简单的来说,其实就是去感知应用程序池的回收,每当感知到这个池子进行了回收,那么系统会自动启动一个W3WP进程,这样相对于以前来说,就已经有很大的提高了。

话不多说,直接上图。

打开SharePoint IIS, 选择应用池,选中其中你想配置的一个池,我这里以80主站点为例,右键,高级设置

技术分享

第一步,选择启动模式,为 alwaysrunning

技术分享

第二步,设置IIS网站的预加载,选中主站点,选择右侧的高级设置

技术分享

预加载选项,选为 启用 即可。

技术分享

本文出自 “马骏一的奔跑空间” 博客,请务必保留此出处http://horse87.blog.51cto.com/2633686/1908909

提高 SharePoint 页面访问速度之应用池预加载