Como monitorar o conjunto de trabalho de um processo do Windows com mais de 4 GB?

3

Aparentemente, o .NET framework possui um bug que impede que valores de conjunto de trabalho acima de 2GB sejam determinados com precisão. Entre 2 e 4GB pode-se aplicar alguns cálculos de xor-ing para obter o valor, mas não há meios de obter valores de conjunto de trabalho maiores que 4GB (usando .Net ou WMI)

Qual método pode ser usado - preferencialmente de um script do PowerShell - para obter uma medida precisa do conjunto de trabalho de um processo quando o conjunto de trabalho for maior que 4 GB?

(alguns detalhes secundários podem ser encontrados em esta pergunta do StackOverflow )

    
por Shoeless 10.07.2012 / 21:04

2 respostas

2

Isso é para monitorar um processo específico:

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

A saída está em bytes, mas você pode convertê-la em GB no seguinte comando:

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

Editar: Lendo a postagem do SO, vejo que você está tentando apenas obter qualquer processo com mais de 4 GB, sem passar um processo específico para o script. Abaixo está um script que vai fazer isso, e aqui está um link para um Artigo do blog do script" que explica como usar o Get-Counter cmdlet:

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

Eu sei que é uma questão antiga, mas ainda está viva este show real uso de memória de 64 bits no powershell:

get-process $ Processname -computername $ Computername | ft Nome, ID, VirtualMemorySize64, PeakVirtualMemorySize64, WorkingSet64, PeakWorkingSet64

e isso mostra o uso de memória mais gps | where {$ _. workingset64 -gt 4000Mb} | nome do ft, pm, workingset64, id

    
por 01.08.2014 / 11:13