{
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,甚至是支持集群,那么最简单的办法就是,尽量用Cookie来纪录登陆信息,以及所有的数据获取的动作都是从数据库中读取。不用session
webgarden配置:在IIS 6.0的Web园中,我们不必创建额外的Web网站,只要指定用于某个应用程序池的工作进程的数量就可以了。具体的配置步骤是:打开应用程序池的“属性”对话框,转到“性能”页,在“Web园”下面的“最大工作进程数”输入框中输入进程数量,如图八。当服务器的负载较小,不需要额外的工作进程时,IIS 6.0在一定的时间后(默认20分钟,可配置)自动缩减实际的工作进程数量;如果负载变大,需要额外的工作进程,IIS 6.0再次增加工作进程数量。这一切操作都自动进行,不需要管理员干预