The Windows agent gathers data by using Windows performance counters. When the Monitoring Station polls the Uptime Infrastructure Monitor agent, the agent requests the required data from the performance counters, parses the appropriate information and returns the requested information to the Monitoring Station.
Because the Uptime Infrastructure Monitor agent uses the performance counters to collect statistics, the memory consumed by the Windows counters is associated with the UIM agent binary. However, the memory is actually being consumed by the Windows operating system, which maintains the built-in performance counters.
Memory usage is generally only noticeable in large systems that are running hundreds of processes at any given time. The UIM agent registers the process performance counter that stores historical data for each process. Storing this information causes the RSS and memory size to increase so as the number of processes running on the system grows, the memory size and RSS will follow accordingly.
This scenario can be demonstrated by using standard Windows performance tools. Running perfmon.exe and loading all the appropriate process counters will recreate the same memory variant that you see with the UIM agent because the agent uses the same counters. The permon. exe utility will spawn a child process (mmc.exe) that will show the memory being consumed by the performance counters.
Any tool that uses Windows performance counters will experience the same issue.
Recreating the scenario using perfmon.exe
Load perfmon.exe and add the counters listed below. After the counters have been successfully added, you can use Uptime Infrastructure Monitor to monitor the memory usage growth.
CPU
- Processor(_Total)% User Time
- Processor(_Total)% Privileged Time
- Processor(_Total)% Interrupt Time
- MemoryAvailable KBytes
- Paging File(_Total)% Usage
- SystemProcessor Queue Length
- MemoryCache Faults/sec
- MemoryPages Output/sec
- MemoryPage Writes/sec
- MemoryPages/sec
- MemoryPages Input/sec
- MemoryPage Faults/sec
- MemoryTransition Faults/sec
- SystemProcesses
- SystemSystem Calls/sec
Disk
- PhysicalDisk(<diskname>)% Disk Time
- PhysicalDisk(<diskname>)Current Disk Queue Length
- PhysicalDisk(<diskname>)Disk Transfers/sec
- PhysicalDisk(<diskname>)Avg. Transfers/sec
- PhysicalDisk(<diskname>)Disk bytes/sec
- PhysicalDisk(<diskname>)Avg. Disk sec/Transfer
Network
- NetworkInterface(<interface>)Bytes Received/sec
- NetworkInterface(<interface>)Bytes Sent/sec
- NetworkInterface(<interface>)Packets Received Errors
- NetworkInterface(<interface>)Packets Outbound Errors
- TCPSegments Retransmitted/sec
Process
- Process(<processname>)ID Process
- Process(<processname>)Creating Process IF
- Process(<processname>)Virtual Bytes
- Process(<processname>)Working Set
- Process(<processname>)% Processor Time
- Process(<processname>)Elapsed Time
Exchange counters
- MSExchange Web MailMessages send per sec
- MSExchange Web MailAuthentications per sec
- MSExchangeIMAP4Connections Current
- MSExchangePOP3Connections Current
- SMTP RoutingConnectionCount
- SMTP ServerBytes Sent/sec
- SMTP ServerBytes Received/sec
- SMTP ServerBytes Total/sec
- SMTP ServerLocal Queue Length
- SMTP ServerMessages Sent/sec
- SMTP ServerInbound Connections Current
- SMTP ServerOutbound Connections Current
- SMTP Connection Errors/sec
SQL Server counters
- SQLServer:General StatisticsUser Connections
- SQLServer:LocksLock Waits/sec
- SQLServer:LocksLock Requests/sec
- SQLServer:LocksAverage Wait Time(ms)
- SQLServer:DatabasesTransactions/sec
- SQLServer:DatabasesData File(s) Size(KB)
- SQLServer:LatchesTotal Latch Wait Time(ms)
- SQLServer:LatchesLatch Waits/sec
- SQLServer:Average Latch Wait Time(ms)
- SQLServer:Memory ManagerMaximum Workspace Memory(KB)
- SQLServer:Memory ManagerGranted Workspace Memory(KB)
- SQLServer:Memory ManagerSQL Cache Memory(KB)
- SQLServer:Memory ManagerTotal Server Memory(KB)