Memory and CPU usage
Memory and CPU usage
Measuring the utilization of the hardware resources within each device in your organization is key to evaluate both the efficiency of devices and the impact of resource consumption on end-user 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 those applications that are most eager for resources.
The Collector takes samples of the amount of memory used by each running process with a period of 30 seconds. Every 5 minutes, interval, the Collector calculates the average value of these samples over the past 5 minutes for sending it later to the Engine. Note that if a process allocates and frees memory very quickly, the Collector may miss some peaks of memory consumption when taking its samples every 30 seconds. Therefore, there is always some uncertainty in the values offered by the Collector, 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, the following fields and aggregates are available for measuring memory usage in Nexthink:
|Average memory usage||field||
||The average memory usage of the execution before being aggregated.|
|Average memory usage per execution||aggregate||
||The average memory usage of all the underlying executions divided by their cardinality.|
|Average memory usage (deprecated)||field||
||The average memory usage of the underlying execution with a sampling rate of 5 minutes|
Note that the memory usage is calculated per process before they may be aggregated by 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 behaviour 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, because the memory utilization is reported per process, before processes are aggregated in the Engine.
In the case of CPU usage, the Collector takes samples of the CPU load of all running processes every 30 seconds. The CPU load is measured 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, CPU samples are not averaged before sending them to the Engine, which lets the Engine know about peaks of CPU utilization. Still, note that the maximum instantaneous load of CPU may not occur simultaneously with the moment when the Collector takes a sample. The Collector sends the CPU samples to the Engine every 5 minutes. For every sample, the Engine calculates the effective CPU utilization of each process during its execution. Retrieve it using the following fields and aggregates:
|Total CPU time||field||
||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||aggregate||
||The sum of the total CPU time of all executions within the scope of the selected object.|
|CPU usage ratio||aggregate||
||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)||field||
||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. The 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.