Encontrei este post porque estou com dificuldades para responder a um problema semelhante em que os limites não estão sendo restritos. Veja IIS WebLimits não sendo respeitados .
No entanto, posso dar uma olhada no seu problema. Experimente o código c # abaixo. Você poderia fazer o mesmo com o powershell. Você precisará executá-lo com direitos de administrador.
static void Main(string[] args)
{
string appPoolName = args[0];
int memLimitMegs = Int32.Parse(args[1]);
var regex = new System.Text.RegularExpressions.Regex(".*w3wp.exe \-ap \"(.*?)\".*");
//find w3wp procs....
foreach (var p in Process.GetProcessesByName("w3wp"))
{
string thisAppPoolName = null;
try
{
//Have to use WMI objects to get the command line params...
using (var searcher = new ManagementObjectSearcher("SELECT CommandLine FROM Win32_Process WHERE ProcessId = " + p.Id))
{
StringBuilder commandLine = new StringBuilder();
foreach (ManagementObject @object in searcher.Get())
{
commandLine.Append(@object["CommandLine"] + " ");
}
//extract the app pool name from those.
var r = regex.Match(commandLine.ToString());
if (r.Success)
{
thisAppPoolName = r.Groups[1].Value;
}
if (thisAppPoolName == appPoolName)
{
//Found the one we're looking for.
if (p.PrivateMemorySize64 > memLimitMegs*1024*1024)
{
//it exceeds limit, recycle it using appcmd.
Process.Start(Path.Combine(System.Environment.SystemDirectory , "inetsrv", "appcmd.exe"), "recycle apppool /apppool.name:" + appPoolName);
Console.WriteLine("Recycled:" + appPoolName);
}
}
}
}
catch (Win32Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
}