私は Ubuntu でビルド サーバーを持っています。そして、私のソース コードでは、ソース コードをコンパイルするために make ファイルを呼び出すのが一般的ですbuild.sh
。しかし、突然サーバーがクラッシュし、以下のログが見つかりましたsyslog
。
Aug 4 13:47:28 VDBS1130 kernel: [2689989.302589] build.sh invoked oom-killer: gfp_mask=0xd0, order=1, oom_adj=0, oom_score_adj=0
Aug 4 13:47:28 VDBS1130 kernel: [2689989.302593] build.sh cpuset=/ mems_allowed=0
Aug 4 13:47:28 VDBS1130 kernel: [2689989.302596] Pid: 8978, comm: build.sh Not tainted 3.2.0-60-generic-pae #91-Ubuntu
Aug 4 13:47:28 VDBS1130 kernel: [2689989.302598] Call Trace:
どういう意味か教えていただけますか? ローカルでbuild.sh
カーネルがクラッシュする可能性はありますか?
答え1
のOOMキラーシステムのメモリが著しく不足している場合にアクティブになります。
Linux の「oom killer」の役割は、他のすべてが失敗したときに、システムのメモリを解放するために 1 つ以上のプロセスを犠牲にすることです。また、明らかな理由により、選択されたプロセスと同じメモリを共有するプロセスも強制終了します。特定のプロセス リーダーは、その値が定数 (現在は -17 と定義されています) に設定されている
mm_struct
場合、oom killer に対して免疫を持つことができます。/proc/<pid>/oomadj
OOM_DISABLE
確認事項:
- ビルド スクリプト内の何かが大量のメモリを消費していますか?
- 使用しているツールにメモリリークはありますか?
見てこのLWNの記事。