はい、Linux カーネルはこのためのメカニズムを提供します:メモリ プレッシャ通知 .これは、https://www.kernel.org/doc/Documentation/cgroup-v1/memory.txt のセクション Memory Pressure に記載されています。 .
つまり、/sys/fs/cgroup/memory/memory.pressure_level
に eventfd ファイル記述子を登録します。 通知を受け取りたいこれらの通知は low
になる可能性があります 、 medium
、または critical
.典型的な使用例は、差し迫った OOM の強制終了を防ぐために、通知を受け取ったときにプロセス内の一部またはすべての内部キャッシュを解放することです。
あなたが求めているのは、基本的に、メモリ不足の状態でのカーネルベースのコールバックですよね?もしそうなら、私はカーネルがしないと強く信じています そのようなメカニズムを提供します。正当な理由があります: メモリが不足しているため、メモリを解放できる唯一のもの、つまり OOM キラーをすぐに実行する必要があります。他のプログラムは、マシンを停止させる可能性があります。
とにかく、ユーザー空間で簡単な監視ソリューションを実行できます。過去に同じ低メモリのデバッグ/アクション要件があり、次のことを行う単純な bash を作成しました:
-
ソフト ウォーターマークの監視:メモリ使用量がこのしきい値を超えている場合は、いくつかの統計 (プロセス、空きメモリ/使用済みメモリなど) を収集し、警告メールを送信します;
-
ハード ウォーターマークの監視:メモリ使用量がこのしきい値を超えている場合は、いくつかの統計を収集し、より多くのメモリを消費する (または重要度の低い) プロセスを強制終了してから、アラート メールを送信します。
このようなスクリプトは非常に軽量で、短い間隔 (つまり、15 秒) でマシンをポーリングできます。