Назад | Перейти на главную страницу

Как контролировать рабочий набор процесса Windows более 4 ГБ?

По-видимому, в платформе .NET есть ошибка, которая не позволяет точно определить значения рабочего набора выше 2 ГБ. Между 2 и 4 ГБ можно применить некоторые вычисления xor-ing для получения значения, но нет средств для получения значений рабочего набора более 4 ГБ (с использованием .Net или WMI)

Какой метод можно использовать - предпочтительно из сценария PowerShell - для получения точного измерения рабочего набора процесса, когда рабочий набор превышает 4 ГБ?

(некоторые подробности можно найти в этот вопрос StackOverflow)

Я знаю, что это старый вопрос, но он все еще жив, это показывает реальное использование 64-битной памяти в PowerShell:

get-process $ Processname -computername $ Computername | ft Имя, ID, VirtualMemorySize64, PeakVirtualMemorySize64, WorkingSet64, PeakWorkingSet64

и это показывает использование памяти через gps | где {$ _. workingset64 -gt 4000Mb} | ft name, pm, workingset64, id

Это для наблюдения за конкретным процессом:

"\Process(<process name>)\Working Set" | get-counter -computer <computer>

Выходные данные представлены в байтах, но вы можете преобразовать их в ГБ с помощью следующей команды:

"\Process(<process name>)\Working Set" | get-counter -computer <computer>
| ForEach {$_.CounterSamples} | ForEach {[math]::round($_.cookedvalue/1GB,2)}

Редактировать: Читая сообщение SO, я вижу, что вы пытаетесь просто получить любые процессы размером более 4 ГБ, не передавая конкретный процесс скрипту. Ниже приведен сценарий, который сделает это, а вот ссылка на Статья в блоге Scripting Guy это объясняет, как использовать Get-Counter командлет:

"\Process(*)\Working Set" | Get-Counter -computer <computer>
| ForEach {$_.CounterSamples} | ? {$_.cookedvalue -gt 4294967296} | ft -AutoSize