aboutsummaryrefslogtreecommitdiffstats
path: root/searchcore
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2021-06-28 13:59:01 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2021-06-28 13:59:01 +0000
commit4a3c4c298b13d7111dc5566210ed4dbc102733a9 (patch)
tree7ad849ed371d66f9720b0264695175481fd874ce /searchcore
parent33c6bde92133346bcd3d02d164a6edde9da68706 (diff)
Use mallinfo to report vespamalloc heap size.
Diffstat (limited to 'searchcore')
-rw-r--r--searchcore/src/vespa/searchcore/proton/metrics/resource_usage_metrics.cpp5
-rw-r--r--searchcore/src/vespa/searchcore/proton/metrics/resource_usage_metrics.h1
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/proton.cpp5
3 files changed, 9 insertions, 2 deletions
diff --git a/searchcore/src/vespa/searchcore/proton/metrics/resource_usage_metrics.cpp b/searchcore/src/vespa/searchcore/proton/metrics/resource_usage_metrics.cpp
index 85b2a7a4b99..c56db96ee8d 100644
--- a/searchcore/src/vespa/searchcore/proton/metrics/resource_usage_metrics.cpp
+++ b/searchcore/src/vespa/searchcore/proton/metrics/resource_usage_metrics.cpp
@@ -14,10 +14,11 @@ ResourceUsageMetrics::ResourceUsageMetrics(metrics::MetricSet *parent)
transient_disk("transient_disk", {}, "The relative amount of transient disk needed for running disk index fusion. Max value among all disk indexes (value in the range [0, 1])", this),
memoryMappings("memory_mappings", {}, "The number of mapped memory areas", this),
openFileDescriptors("open_file_descriptors", {}, "The number of open files", this),
- feedingBlocked("feeding_blocked", {}, "Whether feeding is blocked due to resource limits being reached (value is either 0 or 1)", this)
+ feedingBlocked("feeding_blocked", {}, "Whether feeding is blocked due to resource limits being reached (value is either 0 or 1)", this),
+ mallocArena("malloc_arena", {}, "Size of malloc arena", this)
{
}
-ResourceUsageMetrics::~ResourceUsageMetrics() {}
+ResourceUsageMetrics::~ResourceUsageMetrics() = default;
} // namespace proton
diff --git a/searchcore/src/vespa/searchcore/proton/metrics/resource_usage_metrics.h b/searchcore/src/vespa/searchcore/proton/metrics/resource_usage_metrics.h
index 038d9149b3b..acadeba8372 100644
--- a/searchcore/src/vespa/searchcore/proton/metrics/resource_usage_metrics.h
+++ b/searchcore/src/vespa/searchcore/proton/metrics/resource_usage_metrics.h
@@ -21,6 +21,7 @@ struct ResourceUsageMetrics : metrics::MetricSet
metrics::LongValueMetric memoryMappings;
metrics::LongValueMetric openFileDescriptors;
metrics::LongValueMetric feedingBlocked;
+ metrics::LongValueMetric mallocArena;
ResourceUsageMetrics(metrics::MetricSet *parent);
~ResourceUsageMetrics();
diff --git a/searchcore/src/vespa/searchcore/proton/server/proton.cpp b/searchcore/src/vespa/searchcore/proton/server/proton.cpp
index 26e1bc8b951..139df7f8799 100644
--- a/searchcore/src/vespa/searchcore/proton/server/proton.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/proton.cpp
@@ -40,6 +40,7 @@
#include <vespa/vespalib/util/mmap_file_allocator_factory.h>
#include <vespa/vespalib/util/random.h>
#include <vespa/vespalib/util/size_literals.h>
+#include <malloc.h>
#include <vespa/searchlib/aggregation/forcelink.hpp>
#include <vespa/searchlib/expression/forcelink.hpp>
@@ -763,6 +764,10 @@ Proton::updateMetrics(const metrics::MetricLockGuard &)
metrics.resourceUsage.memoryMappings.set(usageFilter.getMemoryStats().getMappingsCount());
metrics.resourceUsage.openFileDescriptors.set(FastOS_File::count_open_files());
metrics.resourceUsage.feedingBlocked.set((usageFilter.acceptWriteOperation() ? 0.0 : 1.0));
+ struct mallinfo mallocInfo = mallinfo();
+ // Vespamalloc reports arena in 1M blocks as an 'int' is too small.
+ // If we use something else than vespamalloc this must be changed.
+ metrics.resourceUsage.mallocArena.set(uint64_t(mallocInfo.arena) << 20);
}
{
ContentProtonMetrics::ProtonExecutorMetrics &metrics = _metricsEngine->root().executor;