summaryrefslogtreecommitdiffstats
path: root/staging_vespalib
diff options
context:
space:
mode:
authorArne H Juul <arnej@yahoo-inc.com>2016-11-24 13:19:22 +0100
committerArne H Juul <arnej@yahoo-inc.com>2016-11-24 13:19:22 +0100
commite588e18328aee27885d9431ab0e3e854d4f35275 (patch)
tree730a1548f5eb3a6412a7c83d440fdc04788eb777 /staging_vespalib
parent28fca4aa18acb37ab9d242eb3edf5d8bfbd10c8f (diff)
also count number of memory mapped areas
Diffstat (limited to 'staging_vespalib')
-rw-r--r--staging_vespalib/src/vespa/vespalib/util/process_memory_stats.cpp28
-rw-r--r--staging_vespalib/src/vespa/vespalib/util/process_memory_stats.h8
2 files changed, 19 insertions, 17 deletions
diff --git a/staging_vespalib/src/vespa/vespalib/util/process_memory_stats.cpp b/staging_vespalib/src/vespa/vespalib/util/process_memory_stats.cpp
index 18385f13914..3adeaf5c33d 100644
--- a/staging_vespalib/src/vespa/vespalib/util/process_memory_stats.cpp
+++ b/staging_vespalib/src/vespa/vespalib/util/process_memory_stats.cpp
@@ -90,38 +90,37 @@ ProcessMemoryStats::ProcessMemoryStats()
: _mapped_virt(0),
_mapped_rss(0),
_anonymous_virt(0),
- _anonymous_rss(0)
+ _anonymous_rss(0),
+ _mappings_count(0)
{
}
-
ProcessMemoryStats::ProcessMemoryStats(uint64_t mapped_virt,
uint64_t mapped_rss,
uint64_t anonymous_virt,
- uint64_t anonymous_rss)
+ uint64_t anonymous_rss,
+ uint64_t mappings_cnt)
: _mapped_virt(mapped_virt),
_mapped_rss(mapped_rss),
_anonymous_virt(anonymous_virt),
- _anonymous_rss(anonymous_rss)
+ _anonymous_rss(anonymous_rss),
+ _mappings_count(mappings_cnt)
{
}
-
ProcessMemoryStats
ProcessMemoryStats::create()
{
+ ProcessMemoryStats ret;
std::ifstream smaps("/proc/self/smaps");
std::string line;
std::string lineHeader;
bool anonymous = true;
- uint64_t mapped_virt = 0;
- uint64_t mapped_rss = 0;
- uint64_t anonymous_virt = 0;
- uint64_t anonymous_rss = 0;
uint64_t lineVal = 0;
while (smaps.good()) {
std::getline(smaps, line);
if (isRange(line)) {
+ ret._mappings_count += 1;
anonymous = isAnonymous(line);
} else if (!line.empty()) {
lineHeader = getLineHeader(line);
@@ -129,21 +128,20 @@ ProcessMemoryStats::create()
is >> lineVal;
if (lineHeader == "Size") {
if (anonymous) {
- anonymous_virt += lineVal * 1024;
+ ret._anonymous_virt += lineVal * 1024;
} else {
- mapped_virt += lineVal * 1024;
+ ret._mapped_virt += lineVal * 1024;
}
} else if (lineHeader == "Rss") {
if (anonymous) {
- anonymous_rss += lineVal * 1024;
+ ret._anonymous_rss += lineVal * 1024;
} else {
- mapped_rss += lineVal * 1024;
+ ret._mapped_rss += lineVal * 1024;
}
}
}
}
- return ProcessMemoryStats(mapped_virt, mapped_rss,
- anonymous_virt, anonymous_rss);
+ return ret;
}
} // namespace vespalib
diff --git a/staging_vespalib/src/vespa/vespalib/util/process_memory_stats.h b/staging_vespalib/src/vespa/vespalib/util/process_memory_stats.h
index 2a35f7d87a7..d679f29c0af 100644
--- a/staging_vespalib/src/vespa/vespalib/util/process_memory_stats.h
+++ b/staging_vespalib/src/vespa/vespalib/util/process_memory_stats.h
@@ -14,16 +14,20 @@ class ProcessMemoryStats
uint64_t _mapped_rss; // resident size
uint64_t _anonymous_virt; // virtual size
uint64_t _anonymous_rss; // resident size
+ uint64_t _mappings_count; // number of mappings
+ // (limited by sysctl vm.max_map_count)
public:
ProcessMemoryStats();
- ProcessMemoryStats(uint64_t mapped_virt, uint64_t mapped_rss,
- uint64_t anonymous_virt, uint64_t anonymous_rss);
static ProcessMemoryStats create(); // based on /proc/self/smaps
uint64_t getMappedVirt() const { return _mapped_virt; }
uint64_t getMappedRss() const { return _mapped_rss; }
uint64_t getAnonymousVirt() const { return _anonymous_virt; }
uint64_t getAnonymousRss() const { return _anonymous_rss; }
+ uint64_t getMappingsCount() const { return _mappings_count; }
+
+ /** for unit tests only */
+ ProcessMemoryStats(uint64_t, uint64_t, uint64_t, uint64_t, uint64_t);
};
} // namespace vespalib