in src/oomd/OomdContext.cpp [144:210]
void OomdContext::dump(
const std::vector<ConstCgroupContextRef>& cgroup_ctxs,
const bool skip_negligible) {
auto cgmax = std::numeric_limits<int64_t>::max();
OLOG << "Dumping OomdContext: ";
for (const CgroupContext& cgroup_ctx : cgroup_ctxs) {
auto mem_pressure = cgroup_ctx.mem_pressure().value_or(ResourcePressure{});
auto io_pressure = cgroup_ctx.io_pressure().value_or(ResourcePressure{});
auto current_usage = cgroup_ctx.current_usage().value_or(0);
auto average_usage = cgroup_ctx.average_usage().value_or(0);
auto memory_low = cgroup_ctx.memory_low().value_or(0);
auto memory_min = cgroup_ctx.memory_min().value_or(0);
auto memory_high = cgroup_ctx.memory_high().value_or(cgmax);
auto memory_high_tmp = cgroup_ctx.memory_high_tmp().value_or(cgmax);
auto memory_max = cgroup_ctx.memory_max().value_or(cgmax);
auto memory_protection = cgroup_ctx.memory_protection().value_or(0);
auto anon_usage = cgroup_ctx.anon_usage().value_or(0);
auto swap_usage = cgroup_ctx.swap_usage().value_or(0);
auto io_cost_cumulative = cgroup_ctx.io_cost_cumulative().value_or(0);
auto io_cost_rate = cgroup_ctx.io_cost_rate().value_or(0);
auto pg_scan_cumulative = cgroup_ctx.pg_scan_cumulative().value_or(0);
auto pg_scan_rate = cgroup_ctx.pg_scan_rate().value_or(0);
auto kill_preference =
cgroup_ctx.kill_preference().value_or(KillPreference::NORMAL);
if (skip_negligible) {
// don't show if <1% pressure && <.1% usage
auto meminfo = Fs::getMeminfo();
// TODO(dschatzberg) report error
if (meminfo) {
const float press_min = 1;
const int64_t mem_min = (*meminfo)["MemTotal"] / 1000;
const int64_t swap_min = (*meminfo)["SwapTotal"] / 1000;
if (!(mem_pressure.sec_10 >= press_min ||
mem_pressure.sec_60 >= press_min ||
mem_pressure.sec_300 >= press_min ||
io_pressure.sec_10 >= press_min ||
io_pressure.sec_60 >= press_min ||
io_pressure.sec_300 >= press_min || current_usage > mem_min ||
average_usage > mem_min || swap_usage > swap_min)) {
continue;
}
}
}
OLOG << "name=" << cgroup_ctx.cgroup().relativePath();
OLOG << " pressure=" << mem_pressure.sec_10 << ":" << mem_pressure.sec_60
<< ":" << mem_pressure.sec_300 << "-" << io_pressure.sec_10 << ":"
<< io_pressure.sec_60 << ":" << io_pressure.sec_300;
OLOG << " mem=" << (current_usage >> 20) << "MB"
<< " mem_avg=" << (average_usage >> 20) << "MB"
<< " mem_low=" << (memory_low >> 20) << "MB"
<< " mem_min=" << (memory_min >> 20) << "MB"
<< " mem_high=" << (memory_high >> 20) << "MB"
<< " mem_high_tmp=" << (memory_high_tmp >> 20) << "MB"
<< " mem_max=" << (memory_max >> 20) << "MB"
<< " mem_prot=" << (memory_protection >> 20) << "MB"
<< " anon=" << (anon_usage >> 20) << "MB"
<< " swap_usage=" << (swap_usage >> 20) << "MB";
OLOG << " io_cost_cumulative=" << io_cost_cumulative
<< " io_cost_rate=" << io_cost_rate;
OLOG << " pg_scan_cumulative=" << pg_scan_cumulative
<< " pg_scan_rate=" << pg_scan_rate;
OLOG << " kill_preference=" << kill_preference;
}
}