OOM キラーの "Memory cgroup out of memory: OOM victim *** (***) is already exiting. Skip killing the task" を調べた

業務中に Linux の OOM キラーの dmesg を見ていたら、見慣れない形式のログがあったので調べてみた

ログ

こんなログです

May 23 02:06:26 **** kernel: [40872.663481] Memory cgroup out of memory: OOM victim 46452 (nginx) is already exiting. Skip killing the task

〜 is already exiting. Skip killing the task というメッセージは見たことがなかったので調べました。

ソースを調べる

該当のメッセージを grep するとすぐに見つかりました。__oom_kill_process() で出力しています。

static void __oom_kill_process(struct task_struct *victim, const char *message)
{
    struct task_struct *p;
    struct mm_struct *mm;
    bool can_oom_reap = true;

    p = find_lock_task_mm(victim);
    if (!p) {
        pr_info("%s: OOM victim %d (%s) is already exiting. Skip killing the task\n",
            message, task_pid_nr(victim), victim->comm);
        put_task_struct(victim);
        return;
    } else if (victim != p) {
        get_task_struct(p);
        put_task_struct(victim);
        victim = p;
    }


... 略

OOM でプロセスを止める際、task_struct -> mm_struct が参照できない場合に出力されるログのようですね。プロセスが止まる処理と OOM キラーで止めるタイミングがかぶると出るんだろう。

コミットを探す

git blame ですぐに見つかりました。コミットで追加されている。

github.com

5.9 で入ったのかな

コミットログは下記のとおりです

When the OOM killer finds a victim and tryies to kill it, if the victim is already exiting, the task mm will be NULL and no process will be killed. But the dump_header() has been already executed, so it will be strange to dump so much information without killing a process. We'd better show some helpful information to indicate why this happens.

翻訳しておきます

OOMキラーが犠牲者を見つけ、それを殺そうとするとき、犠牲者がすでに終了していれば、タスクmmはNULLになり、プロセスは殺されない。 しかし、dump_header()はすでに実行されているので、プロセスを殺さずに多くの情報をダンプするのは奇妙である。 なぜこのようなことが起こるのかを示すために なぜこのようなことが起こるのかを示すために、有益な情報を示す必要がある。

DeepL での翻訳

なるほどなぁ。

dump_header()

下記のような実装です

static void dump_header(struct oom_control *oc, struct task_struct *p)
{
    pr_warn("%s invoked oom-killer: gfp_mask=%#x(%pGg), order=%d, oom_score_adj=%hd\n",
        current->comm, oc->gfp_mask, &oc->gfp_mask, oc->order,
            current->signal->oom_score_adj);
    if (!IS_ENABLED(CONFIG_COMPACTION) && oc->order)
        pr_warn("COMPACTION is disabled!!!\n");

    dump_stack();
    if (is_memcg_oom(oc))
        mem_cgroup_print_oom_meminfo(oc->memcg);
    else {
        __show_mem(SHOW_MEM_FILTER_NODES, oc->nodemask, gfp_zone(oc->gfp_mask));
        if (should_dump_unreclaim_slab())
            dump_unreclaimable_slab();
    }
    if (sysctl_oom_dump_tasks)
        dump_tasks(oc);
    if (p)
        dump_oom_summary(oc, p);
}

おそらくは、dmesg に invoked oom-killer のログが出ていたが、その後にプロセスの詳細が出ていなくて混乱を招いたケースがあったのでしょうね。

下戸倉沢の右岸 〜 上富士入之防線 🏃

塩原ダム近くの、特に名前やルートがあるわけでもないただの山道を走ってきた。

場所はここです。

走ったコースはこんな感じです。2時間かからないくらいで 走る + 登る ができる低山トレーニングなコースになりそう。

ちょうど ↓ で走ったルートの南側になります。

hiboma.hatenadiary.jp


箒川の駐車場をスタート地点にします。釣人さんもいました。

どんな魚が釣れるんじゃろうか〜


途中通った、和田山隧道です。夕方ごろの日差しで ちょっと神秘的な雰囲気でした。

和田山隧道(トンネル) をすぐ出た先の谷から尾根に登って行きます。左側は小石でガレ(ザレ?) てますが、右側が石も落ち葉も少なくて登りやすい。谷の窪み ( V字の底 ) には枯れ葉が溜まってて、ズボっと足を取られるので注意。

ここが山に入った地点。緑の多い季節だとしんどそうだな


尾根道はこんな感じです。はっきりと踏み固められた道になってますね。ピンクテープも貼ってあるので迷いにくいです。人間だけでなく鹿の通り道でもあるようです ( 💩 で分かる)

三角点を発見


道は送電鉄塔を結ぶように続いています。おそらく、電力会社の人が通るのでしょう。

眺めはぼちぼち良いところが多くて、塩原ダム(左) や那須の山々(右)に見えます。

木々が成長して送電線を邪魔しないよう木が伐採されているみたいで、尾根道なのに不自然に原っぱが広がる。おかげで展望は良い。人間の都合で山の木を植えたり刈ったり〜

獣が登らないように "返し" がついていますね。人間も登ってはだめです 🚫


小1時間ほど登ったあとは、薄暗い谷を下って帰り道に付きます。ずいぶんと昔に切り倒された風な大木 (木の名前が分からない)

管理された針葉樹(桧かな?) の森に出ると危険なところは控えめで、安心して走れます。

さらに下って整った林道に出ました。車も入ってる雰囲気。

舗装された道に出れば安心安全で、ほっと一息。ここからは 3km くらい走ってゴール (スタート地点) まで戻りました。

上富士入之防線という林道らしいですが、インターネットには情報がありません。


帰り際に、走った山を遠くから眺めておしまい。

矢沢の滝 〜 矢沢 🏃

深山ダムに行く途中の矢沢の滝をみて、その後は矢沢沿いの林道を走ってきた。

矢沢の滝はここです。


黒磯田島線の車道から矢沢の滝までは 70〜80m ほどの崖を降りないと行けない。口コミによると崖下まで補助ロープが貼ってあるらしい

どこにロープがあるのか探し回ってみたところ、このミラーの下でした。

思ったよりも しっかりロープが貼ってはあります。とはいえ、ロープの強度がどんなもんかも分からないので、力をかけすぎてもいけない (帰りに撮りました)

落石も怖いので、岩を避けて木の根っこを頼りにします

ロープを貼ったのはどなたなんでしょうね。寄付したい


無事に降りました。お猿さんもうろうろしてましたよ。

寒々しい渓谷

右岸奥にがけ崩れの跡 ( 最初に降りようとしたポイントの近く )

荒々しい岸壁


川を遡って滝にアプローチ! 二回ほど対岸に渡らないといけませんでした。

淵が青くてきれいですね


滝をスケール大きく撮るのは難しいですね。どういう構図がいいんだろうな。 ニンゲンが滝のふもとに立って写真を撮ると、サイズが際立っていいのかも。

いろんな構図を試します。

動画も撮ってみたんじゃ

youtu.be

これは私です。真顔。


滝を見たあとは矢沢の上流へ向かいます。3/3 にはじめて訪れた場所です。

hiboma.hatenadiary.jp

走った記録はこちらです。

林道にはところどころ雪が残ってます。崖から雪が落ちてきて岩を押し流してるのが分かる

雪崩を起こしたような箇所もありました。この時期、雪の積もった斜面は避けたほうがいいですね。

前回に引き換えした地点から,、ほんの少しだけ上流に向います。スタート地点から30分ほど軽く走ってアプローチ。


この辺も淵が青くてきれい

めちゃくちゃ澄んでる

木々が葉っぱを付けるシーズンには どんな風景になるだろうか

魚はいるのかどうかわかりませんでした。


ところで、このポイント少し下流砂防ダムがあリます。ダムに堆積した岩や砂で作られた沢で、元来ある 100% 天然の沢とは違うのかな?


今回は、この地点を渡れず引き返し。

水深は 10cm〜20m 程度で浅く、靴を脱げば難なく渡れそうでしたが、水温が低いしタオルの用意もなかったので安全に倒してやめました。次回、装備を整えて再チャレンジ。


これは私です。


岸壁のつららがいい感じでした。雪解けの水が凍ったようです。

よくみてみると表情のある岸壁が多くて、楽しいです

セザンヌの描いた サント・ヴィクトワール山 みたいな風合い

冬の山で、独り岸壁に向かってパシャパシャ写真を撮る人間は愉快ですね


何の新芽が生えているのもパチリ。苔の芽? そろそろ春ですね