Fix memory collector
This commit is contained in:
@@ -10,6 +10,8 @@
|
|||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
namespace metrics
|
namespace metrics
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -203,14 +205,27 @@ namespace metrics
|
|||||||
Memory Collector::readMemory()
|
Memory Collector::readMemory()
|
||||||
{
|
{
|
||||||
std::ifstream f("/proc/meminfo");
|
std::ifstream f("/proc/meminfo");
|
||||||
std::string key;
|
if (!f)
|
||||||
uint64_t value;
|
return {};
|
||||||
std::string unit;
|
|
||||||
|
|
||||||
uint64_t mem_total = 0, mem_available = 0, swap_total = 0, swap_available = 0, hugepages_total = 0, hugepages_available = 0, hugepages_size = 0;
|
uint64_t mem_total = 0;
|
||||||
|
uint64_t mem_available = 0;
|
||||||
|
uint64_t swap_total = 0;
|
||||||
|
uint64_t swap_available = 0;
|
||||||
|
uint64_t hugepages_total = 0;
|
||||||
|
uint64_t hugepages_available = 0;
|
||||||
|
uint64_t hugepages_size = 0;
|
||||||
|
|
||||||
while (f >> key >> value >> unit)
|
std::string line;
|
||||||
|
while (std::getline(f, line))
|
||||||
{
|
{
|
||||||
|
std::istringstream iss(line);
|
||||||
|
std::string key;
|
||||||
|
uint64_t value = 0;
|
||||||
|
std::string unit;
|
||||||
|
|
||||||
|
iss >> key >> value >> unit; // unit может отсутствовать
|
||||||
|
|
||||||
if (key == "MemTotal:")
|
if (key == "MemTotal:")
|
||||||
mem_total = value * 1024;
|
mem_total = value * 1024;
|
||||||
else if (key == "MemAvailable:")
|
else if (key == "MemAvailable:")
|
||||||
@@ -224,19 +239,24 @@ namespace metrics
|
|||||||
else if (key == "HugePages_Free:")
|
else if (key == "HugePages_Free:")
|
||||||
hugepages_available = value;
|
hugepages_available = value;
|
||||||
else if (key == "Hugepagesize:")
|
else if (key == "Hugepagesize:")
|
||||||
hugepages_size = value;
|
hugepages_size = value * 1024; // kB → bytes
|
||||||
}
|
}
|
||||||
|
|
||||||
Memory memory;
|
Memory memory;
|
||||||
|
|
||||||
memory.memory.total = mem_total;
|
memory.memory.total = mem_total;
|
||||||
memory.memory.available = mem_available;
|
memory.memory.available = mem_available;
|
||||||
memory.memory.used = mem_total - mem_available;
|
memory.memory.used = mem_total - mem_available;
|
||||||
|
|
||||||
memory.swap.total = swap_total;
|
memory.swap.total = swap_total;
|
||||||
memory.swap.available = swap_available;
|
memory.swap.available = swap_available;
|
||||||
memory.swap.used = swap_total - swap_available;
|
memory.swap.used = swap_total - swap_available;
|
||||||
|
|
||||||
memory.hugepages.total = hugepages_total * hugepages_size;
|
memory.hugepages.total = hugepages_total * hugepages_size;
|
||||||
memory.hugepages.available = hugepages_available * hugepages_size;
|
memory.hugepages.available = hugepages_available * hugepages_size;
|
||||||
memory.hugepages.used = hugepages_total - hugepages_available;
|
memory.hugepages.used =
|
||||||
|
memory.hugepages.total - memory.hugepages.available;
|
||||||
|
|
||||||
return memory;
|
return memory;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user