Applies to platform | Windows |
Measuring the utilization of hardware resources within each device in your organization is key to evaluating both the efficiency of devices and the impact of resource consumption on employee experience. Users that perceive their devices as slow usually suffer from scarcity or misuse of two basic system resources: main memory and CPU processing power.
In this article, learn about the fields and aggregate values that measure the usage of memory and processing power in Nexthink. Based on these figures, assess the amount of resources given to a particular device and find out which applications are most resource-hungry.
Collector takes samples of the amount of memory used by each running process over a period of 30 seconds. Collector calculates the average value of these samples over 5-minute intervals to eventually send to Engine. Note that if a process allocates and frees memory very quickly, Collector may miss some peaks of memory consumption when taking its samples every 30 seconds. Therefore, there is always some uncertainty in the values Collector offers, but it is usually negligible for well-behaved applications. Moreover, memory issues typically arise because of a sustained high consumption of memory and not because of short-lived allocations.
Based on the data collected, Nexthink has made the following fields and aggregates available to measure memory usage:
Average memory usage
The average memory usage of the execution before being aggregated
Average memory usage per execution
The average memory usage of all the underlying executions divided by their cardinality
Average memory usage (deprecated)
The average memory usage of the underlying execution with a sampling rate of 5 minutes
Note that Nexthink calculates the memory usage per process before possibly being aggregated into a single execution. A single binary may spawn several identical processes in memory, resulting in a total memory consumption higher than that of the individual processes.
For instance, we can look at the behavior of two well-known web browsers: Chrome and Firefox. Chrome creates a new process for every tab that the browser opens, while Firefox uses a single process for all tabs. Therefore, Firefox will typically report a higher average memory usage than Chrome for similar use cases when multiple tabs are open. This is because Chrome reports the memory utilization per process before processes are aggregated in Engine.
In the case of CPU usage, Collector takes samples of the CPU load of all running processes every 30 seconds. The system measures the CPU load as a percentage value from 0 to 100 for each logical processor that is present in the device. Therefore, the CPU load can be higher than 100% for devices with multiple logical processors. For instance, a device with 12 logical processors has a maximum CPU load capacity of 1200%.
Contrary to memory usage samples, the system does not average CPU samples before sending them to Engine, which lets Engine know about peaks of CPU utilization. Note that the maximum instantaneous load of CPU may not occur simultaneously with the moment when Collector takes a sample. Collector sends the CPU samples to Engine every 5 minutes. For every sample, Engine calculates the effective CPU utilization of each process during its execution. Retrieve it using the following fields and aggregates:
Total CPU time
The effective utilization time of the CPU during the aggregated execution. Note that the total CPU time can exceed the total duration of the execution if the average CPU load was over 100%.
Total CPU time
The sum of the total CPU time of all executions within the scope of the selected object.
CPU usage ratio
The sum of the total CPU time of all executions divided by their duration within the scope of the selected object.
Average CPU usage (deprecated)
Average CPU load of a binary over all logical processors, taking into account all its executions since the binary was first seen. Note therefore that this value does not depend on the selected time frame.
Note that these figures are based on the samples taken directly from running processes. Collector also takes samples of the total CPU load reported by a device (not broken down by processes), but these are just used to signal high CPU conditions in the device.