Hi,
Can I get the memory usage of process on ESX?
Like what "esxtop" command can do:
ID GID NAME MEMSZ GRANT CNSM SZTGT TCHD TCHD_W %ACTV %ACTVS %ACTVF %ACTVN SWCUR SWTGT SWR/s SWW/s
6022074 6022074 CFT_DS_NFS_U64_ 2048.00 1858.00 1858.00 2056.28 1658.88 1638.40 67 64 68 22 0.00 0.00 0.00 0.00
6025086 6025086 CFT_DS_NFS_U64_ 2048.00 1866.00 1866.00 2060.53 1617.92 1617.92 78 70 74 47 0.00 0.00 0.00 0.00
9793 9793 hostd.34366 72.07 48.12 48.12 52.93 19.33 19.33 0 0 0 0 0.00 0.00 0.00 0.00
4747375 4747375 sfcb-ProviderMa 28.48 18.68 18.68 20.55 11.20 11.20 0 0 0 0 0.00 0.00 0.00 0.00
4741823 4741823 vpxa.791587 27.03 17.82 17.82 19.60 5.80 5.80 0 0 0 0 0.00 0.00 0.00 0.00
You can use the Get-EsxTop cmdlet for that.
See some examples in my Hitchhiker’s Guide to Get-EsxTop – Part 1 post.
Let me know if it works for what you want to do.
Blog: lucd.info Twitter: @LucD22 Co-author PowerCLI Reference
Hi LucD,
Thank you for your quick answer
Your example is for cpu usage of each process right?
If I want to get the memory usage of process, should I use VMem counter?
But I see there are many fields of VMem, I am not sure which field I should map to ID and MEMSZ.
Name Type
---- ---
MemClientID U32
IsValid B
CurrentSwapInKB U32
ToBeSwappedInKB U32
SwapReadInKB U32
SwapWriteInKB U32
LlswapReadInKB U32
LlswapWriteInKB U32
ClientTouchedInKB U32
ClientTouchedWrit... U32
ClientSizeInKB U32
ClientTargetInKB U32
MappedInKB U32
SharedInKB U32
ZeroInKB U32
SavedBySharingInKB U32
CurrentOverheadInKB U32
MaxOverheadInKB U32
MinCommitTargetInKB U32
CommitTargetInKB U32
CommitChargedInKB U32
PagesPerShare U64
EstimateActiveInPct U32
EstimateSlowInPct U32
EstimateFastInPct U32
EstimateNextAvgInPct U32
CacheSizeInKB U32
UsedCacheInKB U32
CompressedInKB U64
DecompressedInKB U64
UWOverheadInKB U32
IsBalloonActive B
BalloonSizeInKB U32
BalloonTargetInKB U32
BalloonMaxInKB U32
CheckpointReadInKB U32
CheckpointTargetInKB U32
COWHintInKB U32
That is correct, you need to fetch the VMem counters.
The link between the columns in esxtop and the properties you get is documented (somewhat) in an un-official document.
See my Hitchhiker’s Guide to Get-EsxTop – Part 2 – The wrapper post.
There you will find that the esxtop column MEMSZ maps to the ClientSizeInKB property.
We also need the SchedGroup, that is where we can make the link to the GID and Name, via the MemClientID property.
Notice that I used a ' Sort-Object -Unique' on the VMem counters, this to avoid duplicate identical entries.
Still trying to find out why they are there?!?
$esxName = 'MyESX'
$esxUser = 'root'
$esxPswd = 'password'
$esx = Connect-VIServer -Server $esxName -User $esxUser -Password $esxPswd
$gTab = @{}
(Get-EsxTop –TopologyInfo –Topology SchedGroup).Entries | where{$_.MemClientID} | %{
if(!$gTab.ContainsKey([uint32]$_.MemClientID)){
$gTab.Add([uint32]$_.MemClientID,$_)
}
}
Get-EsxTop –CounterName VMem |
Sort-Object -Property {[int]$_.MemClientID} -Unique |
Select @{N='GID';E={$gTab[[uint32]$_.MemClientID].GroupID}},
@{N='Name';E={$gTab[[uint32]$_.MemClientID].GroupName}},
@{N='MEMSZ';E={[math]::Round($_.ClientSizeInKB/1KB,2)}} |
Sort-Object -Property {[int]$_.GID} | ft -AutoSize
Placing the output next to esxtop, shows we now can get the MEMSZ value
Blog: lucd.info Twitter: @LucD22 Co-author PowerCLI Reference
Hi LucD,
Thank you very much, that is exactly what I want
Pauline.