When multiple ASP.NET worker processes are running, Common Language Runtime (CLR) performance counters will have names that resemble “W3wp#1” or “W3sp#2″and so on. This was remedied in .NET Framework 2.0 to include a counter named Process ID in the .NET CLR Memory performance object. This counter displays the process ID for an instance. You can use this counter to determine the CLR performance counter that is associated with a process.
If you cannot see a counter named Process ID under the .NET CLR Memory object, the performance counter symbols may not be installed correctly. To resolve this issue, follow these steps:
1. Click Start, click Run, type cmd, and then click OK.
2. At the command prompt, type unlodctr .NetFramework, and then press ENTER.
3. Use the cd command to change to the Microsoft.NetFrameworkv2.0.50727 folder.
4. At the command prompt, type lodctr corperfmonsymbols.ini, and then press ENTER.
You then need to run the iisapp.vbs command to get the PID of each App Pool. Once you have the PID, run perfmon and add the .Net CLR Memory/Process ID for each instance of w3wp, w3wp#1, w3wp#2, etc
The corresponding PID will be the only value that perfmon displays for the counter.
As you can see below, I added application pools w3wp#1 and w3wp#2 to perfmon. I have selected w3wp#2, and it shows a constant value of 6892-which corresponds exactly to the PID of the App Pool.