Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Metricbeat perfmon allocates more memory than necessary #5035

Closed
andrewkroh opened this issue Aug 28, 2017 · 1 comment
Closed

Metricbeat perfmon allocates more memory than necessary #5035

andrewkroh opened this issue Aug 28, 2017 · 1 comment

Comments

@andrewkroh
Copy link
Member

While doing heap profiling and code review of the Metricbeat windows-perfmon metricset I observed that more memory was being allocated than was necessary to receive the performance counter values from Windows.

In PdhGetFormattedCounterArray the code was allocating memory for bufferSize x sizeof(PdhCounterValueItem), but it only needed to allocated bufferSize. The buffer size is provided by Windows and already accounts for the sizeof PdhCounterValueItem.

For example if bufferSize=2048 it would end up allocating ~100 kB instead of 2 kB. This would then be cleaned up by GC later.

For confirmed bugs, please report:

  • Version: 6.0.0-beta1
  • Operating System: Windows 2012 R2
  • Steps to Reproduce: Use a perfmon query containing a wildcard.
andrewkroh added a commit to andrewkroh/beats that referenced this issue Aug 28, 2017
In `PdhGetFormattedCounterArray` the code was allocating memory for `bufferSize` x `sizeof(PdhCounterValueItem)`, but it only needed to allocated `bufferSize`. The buffer size is provided by Windows and already accounts for the sizeof PdhCounterValueItem.

Made an improvement to create regexp objects once at startup instead of on every use.

Moved config validation to startup for non-wildcard counter paths. This allows the check to only be performed one time and for any errors to be returned during the config test.

Fixes elastic#5035
This was referenced Aug 28, 2017
ruflin pushed a commit that referenced this issue Aug 29, 2017
In `PdhGetFormattedCounterArray` the code was allocating memory for `bufferSize` x `sizeof(PdhCounterValueItem)`, but it only needed to allocated `bufferSize`. The buffer size is provided by Windows and already accounts for the sizeof PdhCounterValueItem.

Made an improvement to create regexp objects once at startup instead of on every use.

Moved config validation to startup for non-wildcard counter paths. This allows the check to only be performed one time and for any errors to be returned during the config test.

Fixes #5035
andrewkroh added a commit to andrewkroh/beats that referenced this issue Aug 29, 2017
In `PdhGetFormattedCounterArray` the code was allocating memory for `bufferSize` x `sizeof(PdhCounterValueItem)`, but it only needed to allocated `bufferSize`. The buffer size is provided by Windows and already accounts for the sizeof PdhCounterValueItem.

Made an improvement to create regexp objects once at startup instead of on every use.

Moved config validation to startup for non-wildcard counter paths. This allows the check to only be performed one time and for any errors to be returned during the config test.

Fixes elastic#5035
(cherry picked from commit 0fc4dea)
@andrewkroh
Copy link
Member Author

tsg pushed a commit that referenced this issue Aug 29, 2017
In `PdhGetFormattedCounterArray` the code was allocating memory for `bufferSize` x `sizeof(PdhCounterValueItem)`, but it only needed to allocated `bufferSize`. The buffer size is provided by Windows and already accounts for the sizeof PdhCounterValueItem.

Made an improvement to create regexp objects once at startup instead of on every use.

Moved config validation to startup for non-wildcard counter paths. This allows the check to only be performed one time and for any errors to be returned during the config test.

Fixes #5035
(cherry picked from commit 0fc4dea)
leweafan pushed a commit to leweafan/beats that referenced this issue Apr 28, 2023
In `PdhGetFormattedCounterArray` the code was allocating memory for `bufferSize` x `sizeof(PdhCounterValueItem)`, but it only needed to allocated `bufferSize`. The buffer size is provided by Windows and already accounts for the sizeof PdhCounterValueItem.

Made an improvement to create regexp objects once at startup instead of on every use.

Moved config validation to startup for non-wildcard counter paths. This allows the check to only be performed one time and for any errors to be returned during the config test.

Fixes elastic#5035
(cherry picked from commit 3931015)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant