软件测试论坛

 找回密码
 软件测试论坛注册页
查看: 2191|回复: 79

ASP.NET性能提升秘诀之管道与进程优化

[复制链接]
发表于 2011-12-21 17:18:11 | 显示全部楼层 |阅读模式
软件测试工程师就业班马上开班
ASP.NET 2.0中包涵了很多秘密,当你发现它时,可以为你的程序带来更大的性能和扩展性提升。例如,了解了在Membership和Profile provider提供程序中所隐藏的秘密瓶颈后就可以方便地的解决验证问题并使得授权操作的速度加快。
另外,ASP.NET HTTP管道为了避免针对每次请求所要执行的必要代码而发生阻塞。不仅那样,ASP.NET工作者进程能够推动其限制而获得更高的性能。页面碎片在浏览器端的输出缓存(不是在服务器端)可以显著节约回访者的下载时间。按需求的用户界面下载可以让你的站点给人快速流畅的感觉。
最后内容传输网络和HTTP缓存头的恰当使用可以让你的网站惊人的快速。在这篇文章中,你将学习到这些技术,它能够使你的ASP.NET应用程序获得更高的性能、更好的扩展性 ,并且可以在任何ASP.NET的网站上实现,尤其是那些应用了ASP.NET 2.0 Membership 和Profile provider的站点。
ASP.NET管道优化
位于请求管道中的很多ASP.NET默认的HttpModules用于拦截客户端所发出的每个请求。例如,SessionStateModule拦截每个请求,并解析对应的会话cookie,然后在HttpContext中加载适当的会话。实时证明,并不是所有的modules都是必要的。
例如,如果你不使用Membership和Profile provider提供程那么你就可以不需要FormsAuthentication module。如果你需要为你的用户使用Windows验证,那么你就可以不需要WindowsAuthentication。位于管道中的这些modules仅仅在每次请求到来时执行一些不必要的代码。
默认的modules都定义在了machine.config文件中(位于$WINDOWS$\Microsoft.NET\Framework\$VERSION$\CONFIG目录下)。


<httpModules>

  <add name="OutputCache" type="System.Web.Caching.OutputCacheModule" />

  <add name="Session" type="System.Web.SessionState.SessionStateModule" />

  <add name="WindowsAuthentication"

        type="System.Web.Security.WindowsAuthenticationModule" />

  <add name="FormsAuthentication"

        type="System.Web.Security.FormsAuthenticationModule" />

  <add name="PassportAuthentication"

        type="System.Web.Security.PassportAuthenticationModule" />

  <add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" />

  <add name="FileAuthorization" type="System.Web.Security.FileAuthorizationModule" />

  <add name="ErrorHandlerModule" type="System.Web.Mobile.ErrorHandlerModule,

                             System.Web.Mobile, Version=1.0.5000.0,

                             Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />

</httpModules>
复制代码你可以通过在站点的web.config文件中添加<remove>节点到你的网站应用程序中来删除这些默认的modules。例如:
<httpModules>

<!-- Remove unnecessary Http Modules for faster pipeline -->

<remove name="Session" />

<remove name="WindowsAuthentication" />

<remove name="PassportAuthentication" />

<remove name="AnonymousIdentification" />

<remove name="UrlAuthorization" />

<remove name="FileAuthorization" />

</httpModules>
复制代码

  ASP.NET 进程配置优化
ASP.NET进程模型配置定义了一些进程级别的属性,像ASP.NET使用的线程数量、超时前阻止线程花费了多长时间、多少请求在继续等待IO工作完成等等。默认情况下,很多方面都具有太多的限制。当今,硬件已经变得十分便宜了,即使是采用双核多GB的RAM服务器也变得非常平常的选择了。
因此,进程模型配置能够减少ASP.NET进程消耗更多的系统资源并提供为每台服务器提供更好的扩展性。
执行一次规则的ASP.NET安装将会在machine.config文件中创建如下配置的节点:
<system.web>

<processModel autoConfig="true" />
复制代码
你需要减少这种自动配置并针对不同的特性使用一些特定的值以便自定义ASP.NET工作者进程的工作方式。例如:
<processModel

   enable="true"

   timeout="Infinite"

   idleTimeout="Infinite"

   shutdownTimeout="00:00:05"

   requestLimit="Infinite"

   requestQueueLimit="5000"

   restartQueueLimit="10"

   memoryLimit="60"

   webGarden="false"

   cpuMask="0xffffffff"

   userName="machine"

   password="AutoGenerate"

   logLevel="Errors"

   clientConnectedCheck="00:00:05"

   comAuthenticationLevel="Connect"

   comImpersonationLevel="Impersonate"

   responseDeadlockInterval="00:03:00"

   responseRestartDeadlockInterval="00:03:00"

   autoConfig="false"

   maxWorkerThreads="100"

   maxIoThreads="100"

   minWorkerThreads="40"

   minIoThreads="30"

   serverErrorMessageFile=""

   pingFrequency="Infinite"

   pingTimeout="Infinite"

   asyncOption="20"

   maxAppDomains="2000"

/>
复制代码
除了下面几个不为默认值以外,其余均为系统默认值:
maxWorkerThreads  
每次处理默认为20,在一台双核的计算机上,ASP.NET的处理就需要40了。这意味着ASP.NET在一台并行的双核服务器上可以每次处理40个请求。我将数量增加到100以便为ASP.NET的每次处理提供更多的线程。如果你有一个应用程它的CPU处理能力并不是很强但是它却能够每秒更容易地处理多个请求,那么你就可以增加这个值。
尤其是你的Web应用程序使用了大量的Web服务调用或者下载/上传了很多不会对CPU产生压力的数据时。当ASP.NET用完这些工作者线程时,它会停止出来发来的多个请求。此时请求会放置到一个队列中并持续等待直到出现一个空闲的工作者线程。通常到你的站点开始接受超过预期的点击时会发生这样的情况。那样的话,如果你需要节省CPU的使用,可以增加每次处理的工作者线程数来达到目的。
maxIOThreads   
每次处理默认为20,在一台双核的计算机上,ASP.NET进行的I/O操作就需要40个线程了。这意味着ASP.NET在一台并行的双核服务器上可以每次处理40个I/O请求。I/O请求能够进行的文件读/写、数据库操作、web服务调用、从Web 应用程序中产生的HTTP请求等等。因此,如果你的服务器有足够的系统资源来处理更多的I/O请求,你可以将该值设置为100。特别是当你的Web应用程序在并行模式下进行下载/上传数据、调用很多外部Web服务时,非常有用。
minWorkerThreads
当空闲的ASP.NET工作者线程数量低于这个数字时,ASP.NET就会开始将这些发来的请求推入队列中。因此,你可以为改值设定一个较低的值以便可以增加当前请求的数量。此外,建议不要将该值设置得过低,因为Web应用程序的代码可能需要做一些后台处理和并行处理,此时会需要更多的空闲工作者线程支持。
minIOThreads
除了它是针对I/O线程以外,其它与minWorkerThreads的方式相同。然而你可以将该值设置得比minWorkerThreads还低。因为就I/O线程而言,这里不会发生并行处理的问题。
memoryLimit
指定内存大小所允许的最大值,作为整个系统内存的百分比,以便ASP.NET在启动一个新的进程并重新分派存在的请求之前这些工作者进程能够进行消费。如果在你的服务器上仅仅只运行了你的网站应用程而且没有其它的进程需要RAM,你可以设置一个更高的值,比如80。
然而,如果你同时有一个会发生内存泄漏的应用程那么最好是把该值设置为一个较低的值以便在出现大问题之前泄漏的内存能得到及时的回收从而保持你的站点稳定。尤其是当你使用COM组件并发生内存泄漏时。然而,这只是针对该问题的一个临时解决方案;当然需要你去解决泄漏问题。
除了processModel以外,另外还有一个非常重要的节点system.net,你能够指定发出请求作为单独IP的最大数量。

<system.net>

<connectionManagement>

<add address="*" maxconnection="100" />

</connectionManagement>

</system.net>
复制代码
默认值为2,设置得比较低。这就意味着你不能从你的Web应用程序用一个IP地址同时链接多于2个的链接。站点获得外部内容很多都是由于默认设置而遭到阻塞。这里我将其设置为100。如果你的Web应用程序会对某一个指定的服务器进行大量的调用,你甚至可以考虑设置一个更高的值。

ISTQB
发表于 2011-12-21 17:18:56 | 显示全部楼层
软件测试工程师就业班马上开班
一个有信念者所开发出的力量,大于99个只有兴趣者。  
ISTQB
发表于 2011-12-21 17:19:34 | 显示全部楼层
软件测试工程师就业班马上开班
收藏了,一直没有接触过ASP.Net项目,学习一下
发表于 2011-12-21 17:20:56 | 显示全部楼层
软件测试工程师就业班马上开班
完全不懂
发表于 2011-12-21 17:52:35 | 显示全部楼层
软件测试工程师就业班马上开班
哈哈 瞧你说的~~~  
发表于 2011-12-21 18:00:58 | 显示全部楼层
软件测试工程师就业班马上开班
留个脚印```````  
发表于 2011-12-21 18:00:58 | 显示全部楼层
要相信自己~智商为0  
发表于 2011-12-21 18:00:58 | 显示全部楼层
一个个全都骑到老大头上来了...  
发表于 2011-12-21 18:08:45 | 显示全部楼层
先顶后看  
发表于 2011-12-21 18:08:45 | 显示全部楼层
观看中  
发表于 2011-12-21 18:08:45 | 显示全部楼层
不看白不看,看也不白看  
发表于 2011-12-21 18:08:45 | 显示全部楼层
不错不错,我喜欢看  
发表于 2011-12-21 18:08:45 | 显示全部楼层
挤在北京,给首都添麻烦了……  
发表于 2011-12-21 19:04:59 | 显示全部楼层
说的不错  
发表于 2011-12-21 19:04:59 | 显示全部楼层
小心大家盯上你哦  
发表于 2011-12-21 19:04:59 | 显示全部楼层
我回不回呢 考虑再三 还是不回了吧 ^_^  
发表于 2011-12-21 19:04:59 | 显示全部楼层
问渠哪得清如许,为有源头活水来。  
发表于 2011-12-21 19:10:45 | 显示全部楼层
嘿嘿  
发表于 2011-12-21 19:10:45 | 显示全部楼层
家财万贯还得回很多贴哦  
发表于 2011-12-21 19:10:45 | 显示全部楼层
经过你的指点 我还是没找到在哪 ~~~  
发表于 2011-12-21 20:01:17 | 显示全部楼层
呵呵,找个机会...  
发表于 2011-12-21 20:01:17 | 显示全部楼层
嘿嘿  
发表于 2011-12-21 20:01:17 | 显示全部楼层
有空一起交流一下  
发表于 2011-12-21 20:01:17 | 显示全部楼层
来几句吧  
发表于 2011-12-21 20:01:17 | 显示全部楼层
嘿...反了反了,,,,  
发表于 2011-12-21 20:06:24 | 显示全部楼层
帮你项项吧  
发表于 2011-12-21 20:06:24 | 显示全部楼层
我的妈呀,爱死你了  
发表于 2011-12-21 20:06:24 | 显示全部楼层
强人,佩服死了。呵呵,不错啊  
发表于 2011-12-21 20:06:24 | 显示全部楼层
帮你项项吧  
发表于 2011-12-21 20:11:31 | 显示全部楼层
我想要`~  
发表于 2011-12-21 20:11:31 | 显示全部楼层
一个有信念者所开发出的力量,大于99个只有兴趣者。  
发表于 2011-12-21 20:11:31 | 显示全部楼层
去市场买东西,杀价先杀四分之三,现在杀一半行不通了。  
发表于 2011-12-21 20:11:31 | 显示全部楼层
感谢党和人民的关爱~~~  
发表于 2011-12-21 20:11:31 | 显示全部楼层
一楼的位置好啊..  
发表于 2011-12-21 20:18:37 | 显示全部楼层
不错,看看。  
发表于 2011-12-21 20:18:37 | 显示全部楼层
就为赚分嘛  
发表于 2011-12-21 20:18:37 | 显示全部楼层
真是有你的!  
发表于 2011-12-21 20:20:33 | 显示全部楼层
怎么就没人拜我为偶像那?? ~  
发表于 2011-12-21 21:04:47 | 显示全部楼层
我的妈呀,爱死你了  
发表于 2011-12-21 21:04:47 | 显示全部楼层
其实回帖算是一种没德德,所以我快成圣人了  
发表于 2011-12-21 21:04:47 | 显示全部楼层
勤奋真能造就财富吗?  
发表于 2011-12-21 21:45:04 | 显示全部楼层
你还想说什么啊....  
发表于 2011-12-21 21:45:04 | 显示全部楼层
强人,佩服死了。呵呵,不错啊  
发表于 2011-12-21 21:45:04 | 显示全部楼层
应该加分  
发表于 2011-12-21 21:45:04 | 显示全部楼层
只有一条路不能选择——那就是放弃的路;只有一条路不能拒绝——那就是成长的路。  
发表于 2011-12-21 22:01:39 | 显示全部楼层
初来乍到,请多多关照。。。  
发表于 2011-12-21 22:01:39 | 显示全部楼层
几头雾水…  
发表于 2011-12-21 22:01:39 | 显示全部楼层
接到陌生电话请先说,“你好,找哪位”  
发表于 2011-12-21 22:22:06 | 显示全部楼层
真的有么  
发表于 2011-12-21 22:22:06 | 显示全部楼层
(*^__^*) 嘻嘻……  

本版积分规则

Archiver|手机版|小黑屋|领测软件测试网 ( 京ICP备10010545号-5 )

GMT+8, 2021-10-24 00:43 , Processed in 0.230412 second(s), 11 queries , Xcache On.

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表