bool BaseKillPlugin::tryToLogAndKillCgroup()

in src/oomd/plugins/BaseKillPlugin.cpp [577:613]


bool BaseKillPlugin::tryToLogAndKillCgroup(
    const OomdContext& ctx,
    const KillCandidate& candidate) {
  KillUuid kill_uuid = generateKillUuid();
  auto action_context = ctx.getActionContext();

  bool success = tryToKillCgroup(candidate.cgroup_ctx.get(), kill_uuid, dry_);

  if (success) {
    auto mem_pressure =
        candidate.cgroup_ctx.get().mem_pressure().value_or(ResourcePressure{});
    std::ostringstream oss;
    oss << std::setprecision(2) << std::fixed;
    oss << mem_pressure.sec_10 << " " << mem_pressure.sec_60 << " "
        << mem_pressure.sec_300 << " "
        << candidate.cgroup_ctx.get().cgroup().relativePath() << " "
        << candidate.cgroup_ctx.get().current_usage().value_or(0) << " "
        << "ruleset:[" << action_context.ruleset_name << "] "
        << "detectorgroup:[" << action_context.detectorgroup << "] "
        << "killer:" << (dry_ ? "(dry)" : "") << getName() << " v2";
    if (!dry_) {
      Oomd::incrementStat(CoreStats::kKillsKey, 1);
    }
    OOMD_KMSG_LOG(oss.str(), "oomd kill");
  }

  dumpKillInfo(
      candidate.cgroup_ctx.get().cgroup(),
      candidate.cgroup_ctx.get(),
      candidate.kill_root.get(),
      action_context,
      kill_uuid,
      success,
      dry_);

  return success;
}