Я пытаюсь написать небольшой монитор процессов IIS (использование ЦП и памяти), который должен быть максимально легким для системы. Все, что мне нужно, это имя пула приложений IIS, текущее использование памяти и текущее использование ЦП.
Мне удалось сделать это без больших проблем, используя эти две команды:
using (var srvman = new ServerManager())
{
workerProcesses = srvman.WorkerProcesses;
}
а также
processes = Process.GetProcesses().Where(processItem => processItem.ProcessName.Contains("w3wp") || processItem.ProcessName.Contains("php-cgi"))
Первый возвращает запущенные пулы приложений с идентификаторами процессов, а второй возвращает информацию о процессах из системы (так что здесь я получаю данные об использовании ЦП и памяти). Объединение этих двух сведений дает мне почти то, что я хочу. Единственным исключением являются приложения PHP, работающие в IIS.
Для приложений PHP создаются процессы php-cgi.exe
, которые мне нужно сопоставить с рабочим процессом пула приложений IIS. У вас есть идеи, как связать php-cgi.exe
процессы с их w3wp.exe
родителями?
Вот пример вывода, который я хотел бы произвести:
1x w3wp.exe for site.com is using 15MB memory
4x php-cgi.exe is using 4x 15MB = 60MB memory
Я планирую суммировать эту информацию (что в этом сценарии будет составлять 75 МБ использования памяти для site.com).