in src/oomd/plugins/DumpCgroupOverview.cpp [34:66]
void dumpCgroupOverview(const Oomd::CgroupContext& cgroup_ctx, bool always) {
// Only log on exceptional cases
auto pressure = cgroup_ctx.mem_pressure().value_or(Oomd::ResourcePressure{});
bool should_dump = (always || (pressure.sec_10 >= 1 && pressure.sec_60 > 0));
if (!should_dump) {
return;
}
const auto& path = cgroup_ctx.cgroup();
const int64_t current = cgroup_ctx.current_usage().value_or(0);
// TODO(dschatzberg): Report error
auto meminfo = Oomd::Fs::getMeminfo();
int64_t swapfree = 0;
int64_t swaptotal = 0;
if (meminfo) {
swapfree = (*meminfo)["SwapFree"];
swaptotal = (*meminfo)["SwapTotal"];
}
int64_t pgscan = 0;
// TODO(dschatzberg): Report error
auto vmstat = Oomd::Fs::getVmstat();
if (vmstat) {
pgscan = (*vmstat)[kPgscanSwap] + (*vmstat)[kPgscanDirect];
}
std::ostringstream oss;
oss << std::setprecision(2) << std::fixed;
oss << "cgroup=" << path.relativePath() << " total=" << current / 1024 / 1024
<< "MB pressure=" << pressure.sec_10 << ":" << pressure.sec_60 << ":"
<< pressure.sec_300 << " swapfree=" << swapfree / 1024 / 1024 << "MB/"
<< swaptotal / 1024 / 1024 << "MB pgscan=" << pgscan;
OLOG << oss.str();
}