Linuxでメモリが不足しているときにアクションをトリガーする方法は?

Linuxでメモリが不足しているときにアクションをトリガーする方法は?

だから私はこれが非常に簡単な修正になると思いました。カーネルがユーザー領域にメモリが不足していることを知っているときにいくつかのタスクをトリガーするサービス/カーネルモジュール。 ))独自のプライベートメモリを持つプロセスで(したがってfork()が失敗したり、他の一般的なOOMの問題は発生しません)。

見つけました。OOMキラー、これは役に立つことを知っていますが、実際に必要なことをしません。

理想的には、メモリが不足している場合はその理由を知りたいです。起動時に実行され、固定量のメモリを使用し、カーネルからメモリ不足の通知を受け取った場合にのみタスクを実行する独自のプログラムを作成できるとします。しかし、そうすると、それ自体が問題を引き起こす可能性があります。

同様のことを知らせるシステムコールはありますか?カーネルに「メモリが128MBしか残っていない場合は目を覚ます」と言う方法は?

オンラインとここで検索しましたが、その説明に合ったものが見つかりませんでした。ほとんどの人が時間遅延にポーリングを使用しているように見えますが、明らかな問題は、どのプロセスが問題を引き起こしているのかを知る可能性が低いことです。

ベストアンサー1

はい、Linuxカーネルはそのためのメカニズムを提供します。メモリ不足通知。この内容は次のように記録されます。https://www.kernel.org/doc/Documentation/cgroup-v1/memory.txt、部分記憶力の出版物

つまり、/sys/fs/cgroup/memory/memory.pressure_level通知を受けたい eventfd ファイル記述子を登録します。これらの通知は、またはするlowことがmediumできますcritical。一般的なユースケースは、差し迫ったOOMシャットダウンを防ぐために通知を受け取ったときにプロセスの内部キャッシュの一部または全部を解放することです。

おすすめ記事