某个进程占用内存


PowerShell交流中心分类: Powershell基础某个进程占用内存
0
robo asked 4年 ago

$process = Get-Process Chrome
$pf=New-Object System.Diagnostics.PerformanceCounter
$pf.CategoryName=”Process”
$pf.CounterName=”Working Set – Private”
$pf.InstanceName=$process.Name
($pf.NextValue()/1mb).ToString(“0.0MB”)

 
报错误:
使用“0”个参数调用“NextValue”时发生异常:“指定的类别中不存在实例“chrome chrome chrome chrome chrome chrome chrome chrome chrome chrome chrome
chrome chrome chrome chrome chrome”。”
 
单个进程没有问题。 测试多个进程时出现错误。
 
求赐教。谢谢。
 
 
 
执行出现错误。
 

×用微信扫描并分享
1 Answers
0
Best Answer
Mooser Lee 管理员 answered 4年 ago

$process = Get-Process Chrome返回的Chrome 又多个进程,是一个数组,把它赋值给$pf.InstanceName自然会出错。
你直接把chrome写死即可:

$pf=New-Object System.Diagnostics.PerformanceCounter
$pf.CategoryName="Process"
$pf.CounterName = "Working Set - Private"
$pf.InstanceName = 'chrome'
($pf.NextValue()/1mb).ToString("0.0MB")
robo replied 4年 ago

嗯嗯,明白了。谢谢。

想再请教一个问题。
有两个w3wp进程,应用程序池 不一样,

名称 PID 状态 用户名 CPU 内存(专用工作集) 描述
w3wp.exe 21560 正在运行 piscenter 00 110,048 K IIS Worker Process
w3wp.exe 24596 正在运行 piscenter-back 00 238,328 K IIS Worker Process

后面的用户名不同,我想获取指定用户名下的,w3wp 进程占用了多少内存。

Mooser Lee 管理员 replied 4年 ago

process 的性能计数器,只能做到进程名称计数,不能做到根据进程Id计数。

Mooser Lee 管理员 replied 4年 ago

但是你可以直接通过Get-Process w3wp 返回的PM和VM计算,这些指标已经很能说明问题了。然后就是进程的对应的运行账号信息,可以参考https://social.technet.microsoft.com/Forums/windowsserver/en-US/45c541e0-fb49-4ac7-bcaf-738315a70863/getprocess-and-username?forum=winserverpowershell,如何向直接以引用程序池为维度查询,可以使用:
gwmi -NS ‘root\WebAdministration’ -class ‘WorkerProcess’ | select PSComputerName, AppPoolName,ProcessId , @{n=’RAM’;e={ [math]::round((Get-Process -Id $_.ProcessId -ComputerName $_.PSComputerName).WorkingSet / 1Mb) }} | sort RAM -Descending | ft -AutoSize