diff options
author | Arne H Juul <arnej@yahoo-inc.com> | 2016-11-24 13:19:22 +0100 |
---|---|---|
committer | Arne H Juul <arnej@yahoo-inc.com> | 2016-11-24 13:19:22 +0100 |
commit | e588e18328aee27885d9431ab0e3e854d4f35275 (patch) | |
tree | 730a1548f5eb3a6412a7c83d440fdc04788eb777 /staging_vespalib | |
parent | 28fca4aa18acb37ab9d242eb3edf5d8bfbd10c8f (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.cpp | 28 | ||||
-rw-r--r-- | staging_vespalib/src/vespa/vespalib/util/process_memory_stats.h | 8 |
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 |