I have applications that run in all three application-protection modes—Low, Medium, and High—on my IIS 5.0 server. Recently, one application has started to consume almost 100 percent of the CPU time. How can I identify which process this application is running in?
Determining the process in which an application is running can be challenging, but a few options exist. First, however, let's review a few basics about how IIS 5.0 runs applications. (Much of this information also applies to IIS 4.0.) Low application-protection mode is known as running in process because the application runs in the inetinfo.exe process. Because any Web application running in process will be part of the inetinfo.exe process, you can't monitor any performance characteristics separately for applications running in this process.
In IIS 5.0, you can set an application to run Medium (i.e., pooled out of process) mode. A single instance of dllhost.exe loads all Web applications that are set to run in the pool. As a result, you can't monitor pooled out-of-process applications separately from the process in which they run.
You can also run applications in High mode (aka running applications in a separate memory space in IIS 4.0). In this setting, a Web application executes in its own instance of dllhost.exe (mtx.exe, the executable for Microsoft Transaction Server—MTS—in IIS 4.0) and can be independently monitored.
Typically, you must run your application in High mode to monitor its performance. Even so, the problem of identifying which instance of dllhost.exe (or mtx.exe) is hosting the errant application remains. As Figure 2 shows, using Windows Task Manager, you can't identify which process is associated with a given instance of dllhost.exe unless you know the process associated with the instance's process identifier (PID). To find the process associated with the PID, you can use the Microsoft Management Console (MMC) Component Services snap-in (IIS 5.0) or the MMC Microsoft Transaction Server snap-in (IIS 4.0). With the appropriate snap-in open, expand the console tree to the COM+ Applications (IIS 5.0) or Packages Installed (IIS 4.0) node. Then, select View, Status View. Figure 3 shows the Component Services snap-in window with the desired information. In the right pane, you can clearly see that PID 1956 is associated with the Default Web Site. Thus, if your application uses COM+ objects, you can obtain useful information from the Microsoft Transaction Server or Component Services snap-in about an object, even if you use that object in an in-process application. (Be sure to load the object into the appropriate MMC console.)
To further study the details of the now-identified process, I recommend that you download Process Explorer—an outstanding, free utility from Sysinternals. With Process Explorer, you can identify details such as related registry keys, security contexts, threads, and priority. The tool also includes a Performance tab that shows process CPU time and memory utilization details.