zoukankan      html  css  js  c++  java
  • 通过系统配置来提高ASP.NET应用程序的稳定性

    大家都知道,要实现一个24*7全天候运行的应用程序并不是一件容易的事。我的一个项目就曾经在暴力负荷下坚持了20多个小时后还是壮烈挂掉了。幸运的是,ASP.NETIIS为我们提供了一些简便的设施,使我们能够轻松构建超级稳定的.Net应用程序。不过稍嫌不爽的是,Windows 2000IIS6.0 以下版本) Windows 2003IIS6.0)系统下的配置方法不尽相同。

     

        先说说windows 2000系统,熟悉ASP.NET的兄台应当都知道 machine.config 这个文件吧,它保存在 %WindowPath%\Microsoft.Net\Framework\%.NetVersion%\CONFIG\ 目录下。随便用什么文本编辑器(当然最土的就属 “记事本” 了)打开该文件,找到 <processModel ...> 这一节。ASP.NET就是根据这一节的设置,来控制ASP.NET服务进程aspnet_wp.exe w3wp.ext )的。我们的写的ASP.NET 应用程序代码就运行在这个进程空间内。如果你使用的是Framework 1.1 你会在这一节中看到n多个属性,我们关心的是下面三个,等号后面是它们的缺省值:

        
        timeout="Infinite"

        idleTimeout="Infinite"

        memoryLimit="60"

     

        在 Framework 2.0 下你看不到它们,但你可以手工把它们添加进去。

     

        我来翻译一下这三个属性的意思,在持续运行了 timeout 指定的时间后,重启 ASP.NET服务进程,timeout 省值为无穷大,你可以按“HH:MM:SS”的格式重新设置,如,timeout=24:00:00表示24小时后重启; 如果在 idleTimeout 指定的时间内没人的访问,则重启 ASP.NET服务进程idleTimeout 缺省值同样为无穷大,设置方式如上;如果ASP.NET服务进程 使用的内存占系统总内存的百分比超过了 memoryLimit 指定的数量,则重启 ASP.NET服务进程

     

        明白了吧,通过这三个属性的配合,就可以神不知,鬼不觉的重启服务进程,从而使咱的应用程序生生不息的运行下去。我这样说,细心的读者可能已经发现问题了,当服务进程重启时,客户端的会话(Session)必然会丢失,用户的操作也就被中断了。怎么能做到“神不知,鬼不觉”呢?
        
        这个问题确实存在,不过可以通过如下措施将其影响减至最小,甚至完全消除:

     

        首先,我们可以把 idleTimeout 设为一个合理的值,通常我会将其置为会话(Session)超时设置的1.5-3倍。将timeout 置为程序能坚持的上限值,我通常将其置为24小时。这样将迫使服务进程在空闲时重启,由于这时不存在任何会话(Session),所以也就不可能中断用户的操作。这种设置在中小企业办公环境中非常有效,因为下班后基本没有人访问。

     

        当然,上面的方法局限性很大,只能在特定场合起作用。如果在持续有人访问,或者内存超限的情况下重启,用户的操作仍然会受到干扰。一个终极的解决办法就是,将会话(Session)状态保存在独立的进程中。在ASP.Net上,这也可以通过简单的配置实现。

    看看 Windows 2003 (IIS6.0) 下的配置方法。

            IIS6.0默认的运行模式是进程隔离模式,它通过应用程序池来支持多个ASP.NET服务进程并行运行,前文讲到的machine.config 文件中 <processModel ...> 这一节的大部分设置在这种运行模式下都会被忽略掉,我们前文提到的那三个属性也在其中。不过不用担心,IIS6.0下的配置更加简单直观。 具体步骤如下:

        1,打开“IIS管理器”

        2,在"进程池"文件夹中找到你的ASP.NET应用程序所在的服务进程,右击并选择“属性”项,见下面二图,其它就不用我多废话了吧。

            除此之外,还有一种办法可以让 IIS6.0 和 IIS5.0 一样,使用machine.config 文件中 <processModel ...> 这一节的设置来控制ASP.NET服务进程。

        同样打开"IIS管理器",右击"网站"文件夹,选取"属性"项,如下图,勾选 "以IIS5.0隔离模式运行Web服务":

        这样,IIS6.0和IIS5.0的行为就完全一样了,连ASP.NET服务进程的名称都从"W3WP.exe"变成"ASPNET_WP.exe"了。不过,这种做法完全属于开历史的倒车,如果没有什么不可告人的目的,坚决不予推荐。

    本文转自http://louisliu.cnblogs.com/,原文地址http://louisliu.cnblogs.com/archive/2006/03/07/344342.html
    http://louisliu.cnblogs.com/archive/2006/03/09/346076.html

  • 相关阅读:
    团队博客——1
    团队博客3
    团队博客6
    团队博客2
    团队博客8
    团队博客4
    团队博客7
    安装“消息队列 (MSMQ)”
    服务端上传文件到共享目录
    数据库变成可疑状态
  • 原文地址:https://www.cnblogs.com/xh831213/p/346365.html
Copyright © 2011-2022 走看看