4. VMware Tools
The following table explains the meaning of the value of Tools status property
|Guest Tools Not Installed||Tools are not installed on the VM. You should install it as you get both drivers and visibility|
|Current||Tools version matches with the Tools available with ESXi. Each ESXi has a version of Tools that comes with it. See this for the list. This is the ideal scenario|
|Supported New||Newer than the ESXi VMware tools version, but it is supported|
|Supported Old||The opposite of New. It is also supported. Even it is older by 0.0.1 is considered old. It does not have to far behind|
|Too Old||Tools version is older than the minimum supported version of Tools across all ESXi versions. Minimum supported version is the oldest version of Tools we support. Basically, guest is running unsupported Tools. You should upgrade. As of now for Linux and Windows guests. minimum supported version is the Tools version bundled with ESXi 4.0 which is 8.0.1. Supporting such old versions is challenging. We are planning to change this in future to something newer. In the meantime, you should upgrade as might not work as expected|
|Unmanaged||Tools installed in the guest did not come from ESXi, so Tools is not being managed by ESXi host. It may be supported or maybe not, depends on what type of Tools is running in the guest. We support open-vm-tools packaged by Linux vendors and OSPs, which both show up as unmanaged.
If a customer builds their own open-vm-tools from source code, we may not support that because we will not know if they have done it correctly or not
I covered the various counters used by Tools in their respective section. The following table provides a summary with their key and formula. Not all counters are exposed by Tools and vRealize Operations.
If you notice a rare intermittent collection, check
vmware.log of the VM. It could be that vmtoolsd daemon in Guest OS paused for a while, due to guest workload or other issue in Windows or Linux.
Linux Memory Metrics
|guest.contextSwapRate||"ctxt" from /proc/stat||Number/sec|
|guest.mem.activeFileCache||"Active(file)" from /proc/meminfo||KB|
|guest.mem.free||"MemFree" from /proc/meminfo||KB|
|guest.mem.physUsable||Sum of /proc/zoneinfo#present across all zones. Equals to VM configured RAM.||KB|
|guest.mem.needed||"guest.mem.physUsable" - max(0, "MemAvailable" from /proc/meminfo - 5% of "guest.mem.physUsable")||KB|
"pgpgin" from /proc/vmstat
The rate of reads going through the underlying paging/cache system. It includes not just swapfile I/O, but cacheable reads as well.
I think Tools take the last value, and not the average over the last collection period. Meaning if Tools collect every 60 seconds, it takes 1 value at 60th second, not the average of 60 values in the entire 60 seconds.
"pgpgout" from /proc/vmstat
The rate of writes going through the underlying paging/cache system. It includes not just swapfile I/O, but cacheable writes as well.
"SwapFree" from /proc/meminfo
The amount of swap space remaining, taking into account the possibility of swapfile growth where possible. If the OS is configured without a swapfile, this will return zero.
|guest.hugePage.size||"Hugepagesize" from /proc/meminfo||KB|
"HugePages_Total" from /proc/meminfo
Total large pages allocated
|Large page count|
|guest.mem.neededReservation||5% of "guest.mem.physUsable"||KB|
|guest.mem.available||"MemAvailable" from /proc/meminfo||KB|
|guest.mem.slabReclaim||"SReclaimable" from /proc/meminfo||KB|
|guest.mem.buffers||"Buffers" from /proc/meminfo||KB|
|guest.mem.cached||"Cached" from /proc/meminfo||KB|
|guest.mem.total||"MemTotal" from /proc/meminfo||KB|
Windows Memory Metrics
|guest.contextSwapRate||Win32_PerfFormattedData_PerfOS_System = @#ContextSwitchesPersec from WMI|
|guest.mem.activeFileCache||Win32_PerfRawData_PerfOS_Memory = @#SystemCacheResidentBytes from WMI|
|guest.mem.free||Win32_PerfRawData_PerfOS_Memory = @#FreeAndZeroPageListBytes from WMI|
|guest.mem.physUsable||Win32_OperatingSystem = #TotalVisibleMemorySize from WMI|
guest.mem.physUsable - max(0, UNNEEDED_BYTES - 5% of guest.mem.physUsable),
|guest.page.inRate||Win32_PerfFormattedData_PerfOS_Memory = @#PagesInputPersec from WMI|
|guest.page.outRate||Win32_PerfFormattedData_PerfOS_Memory = @#PagesOutputPersec from WMI|
|guest.swap.spaceRemaining||(maximum possible - used) swap space|
|guest.page.size||SYSTEM_INFO.dwPageSize returned by GetSystemInfo()|
|guest.mem.neededReservation||5% of "guest.mem.physUsable"|
|guest.mem.availableToMm||Win32_PerfRawData_PerfOS_Memory = @#AvailableBytes from WMI|
|guest.mem.standby.normal||Win32_PerfRawData_PerfOS_Memory = @#StandbyCacheNormalPriorityBytes from WMI|
|guest.mem.standby.reserve||Win32_PerfRawData_PerfOS_Memory = @#StandbyCacheReserveBytes from WMI|
|guest.mem.standby.core||Win32_PerfRawData_PerfOS_Memory = @#StandbyCacheCoreBytes from WMI|
|guest.mem.modifiedPages||Win32_PerfRawData_PerfOS_Memory = @#ModifiedPageListBytes from WMI|
Linux CPU and Disk Metrics
|guest.cpu.runQueue||“procs_running” from /proc/stat||Number|
|guest.disk.requestQueue||Sum of pending IOs from /proc/diskstats across all active block devices||Number|
|guest.disk.requestQueueAvg||Sum of weighted time deltas across all active block devices||Number|
Windows CPU and Disk Metrics
|guest.processor.queue||Win32_PerfFormattedData_PerfOS_System = @#ProcessorQueueLength from WMI|
|guest.disk.queue||Win32_PerfFormattedData_PerfDisk_PhysicalDisk.Name = \"_Total\"#CurrentDiskQueueLength" from WMI|
|guest.disk.queueAvg||Win32_PerfFormattedData_PerfDisk_PhysicalDisk.Name = \"_Total\"#AvgDiskQueueLength" from WMI|
This page was last updated on June 30, 2021 by Stellios Williams with commit message: "Cleaned MD syntax"