区分w3wp进程对应的应用程序池

有时候多人共用一个开发环境,为了附加进程调试(设置程序分别对应两个应用程序池),但是两个应用程序池设置之后怎么区分?go

  1. 直接在dos里面输入 iisapp -a  弹出的提示点确定即可
  2. iis6 cd到system32目录dos输入:  cscript iisapp.vbs    iis7 cd到system32目录dos输入 %windir%/system32/inetsrv/appcmd list wp
  3. public static string GetAllW3wp(string input)

        {
            ObjectQuery oQuery = new ObjectQuery("select * from Win32_Process where Name='w3wp.exe'");
            ManagementObjectSearcher oSearcher = new ManagementObjectSearcher(oQuery);
            ManagementObjectCollection oReturnCollection = oSearcher.Get();

            string pid;
            string cmdLine;
            StringBuilder sb = new StringBuilder();
            foreach (ManagementObject oReturn in oReturnCollection)
            {
                pid = oReturn.GetPropertyValue("ProcessId").ToString();
                cmdLine = (string)oReturn.GetPropertyValue("CommandLine");

                string pattern = "-ap \"(.*)\"";
                Regex regex = new Regex(pattern, RegexOptions.IgnoreCase);
                Match match = regex.Match(cmdLine);
                string appPoolName = match.Groups[1].ToString();
                sb.AppendFormat("W3WP.exe PID: {0}   AppPoolId:{1}\r\n", pid, appPoolName);
            }
            return sb.ToString();
        }

对于 IIS6、IIS7,每个应用程序池都会创建一个 W3WP.exe 进程。并不是所有情况都是一个应用程序池对应一个 W3WP.exe 进程。 Web Garden或者一些异常发生时候,就会一个应用程序池对应多个 W3WP.exe 进程。

什么是webgarden?

IIS6 Web Garden 指的是一个应用程序可以成多个进程(w3wp.exe)来执行,一次请求使用其中的一个。用这个的主要目的是提高程序的可用性。当其中一个进程发生错误,那么也不会影响其他进程。发生错误的进程可以根据规则关闭,而其他的进程则可以继续工作。

  可惜不是每个应用程序都支持Web Garden的。一般来说 , 不支持 Web Garden 的原因是各应用程序的内存状态是不同的。虽然是访问同一个网站 , 当访问第一个进程时,进程的内存如果纪录了某些重要的信息,而当访问第二个进程的时,却无法再得到那些信息时,那么程序就不一定能运行正常,或者会发生错误。
 
  所以,一般使用 InProc HttpSessionState / HttpApplicationState / 静态变量来储存关键信息 的程序是不支持 Web Garden的。另外平时说Session信息丢失,也和这个有关。一般很多程序都使用Cache来储存临时数据,但如果某些被修改或删除的数据没有在该进程的Cache中得到更新,那么也会很容易导致程序出错。

如果你希望应用程序支持Web Garden,甚至是支持集群,那么最简单的办法就是,尽量用Cookie来纪录登陆信息,以及所有的数据获取的动作都是从数据库中读取。不用session

webgarden配置:在IIS 6.0的Web园中,我们不必创建额外的Web网站,只要指定用于某个应用程序池的工作进程的数量就可以了。具体的配置步骤是:打开应用程序池的“属性”对话框,转到“性能”页,在“Web园”下面的“最大工作进程数”输入框中输入进程数量,如图八。当服务器的负载较小,不需要额外的工作进程时,IIS 6.0在一定的时间后(默认20分钟,可配置)自动缩减实际的工作进程数量;如果负载变大,需要额外的工作进程,IIS 6.0再次增加工作进程数量。这一切操作都自动进行,不需要管理员干预

原文地址:https://www.cnblogs.com/shenqiboy/p/3081857.html