メモリ不足 (OOM) エラーに関連するシステムの問題に直面しています。この状況では、Linux の oom kill ユーティリティが特定のアルゴリズムを使用してプロセス (「不良プロセス」と呼ばれる) を強制終了し、スペースを解放します。この状態が発生する直前に、メモリを印刷し、統計を処理したいと思います。
mm/oom_kill.c には関数 out_of_memory() が含まれています。この関数が「悪いプロセス」を殺して先に進む直前に、統計を出力したかったのです。このために、次のbashスクリプトを作成しました
#!/bin/bash
# Script to print process related info
echo "Vmstat " > OOM_memresults
vmstat >> OOM_memresults
echo >> OOM_memresults
echo "SLABINFO" >> OOM_memresults
cat /proc/slabinfo >> OOM_memresults
echo >> OOM_memresults
echo "Status of process getting killed" >> OOM_memresults
cat /proc/$1/status >> OOM_memresults
今私が直面している問題は、カーネル コードからこのスクリプトを呼び出す方法を見つけることです。
system("scriptname") は使用できません。システム関数が Linux カーネルで使用できないためです。また、exec とそのバリアントも使用できません。
カーネルコードからこのスクリプトを呼び出す方法、またはカーネルコードからいつでもプロセス、メモリ関連情報を印刷できるその他の方法についてのアイデア。「現在の」関数は、現在実行中のプロセスとその task_struct に関する情報を提供しますが、有用な情報を引き出すのは非常に困難です。