seri
2019年4月18日 10時02分
お世話になります。
Linux初心者のため、何をどうしたらよいか困っています。
プログラムを24時間連続運転で何日も動作させている時に、以下のようなメッセージが出力され、機能が停止してしまいました。
invoked oom-killer: gfp_mask=0xd0, order=2, oom_adj=0, oom_score_adj=0
出るタイミングは不定期で、出る時もあれば、出ないときは全く出ません。
oomはOut of Memoryのようですが、
このメッセージがでるのは、どのような要因があるのでしょうか。
また、通常どのように対策すれば良いでしょうか?
どうぞご教示のほど宜しくお願いします。
Kernelバージョン:3.4-at5
コメント
izawa
毎度お世話様、izawaです。
> oom_score_adjを0(never kill)に設定することは、Linuxカーネルが正常に動
> 作できなくなる可能性が上がる為におすすめしません。
とありますが、通常のプロセスは0になっているようです。
for foo in /proc/[0-9]*; do echo `cat $foo/comm` : `cat $foo/oom_score_adj`; done |sort |uniq |grep -v ' 0$'
何か勘違いされているのでしょうか。
尚、oom_score_adjを調整することは得策ではなさそうです。
http://moriwaka.blogspot.com/2016/02/oom-killer.html
そもそも質問者のseriさんの場合は、
・落ちたプロセスは何か
・他にどんなプロセスが動いているか
・関与したプロセスが自作の場合は充分テストされているか
と言ったアプローチをとるべきであり、それらを尽くした上でoom-killer対策を考えるべきだと思いますが。
at_mizo
at_mizo
2019年4月18日 11時16分
溝渕です。
> oomはOut of Memoryのようですが、
> このメッセージがでるのは、どのような要因があるのでしょうか。
メモリ枯渇が原因です。
> また、通常どのように対策すれば良いでしょうか?
ご利用のプログラムで、不要なメモリの確保または、メモリリークを疑ってみ
てください。
該当プログラムだけがoom-killerにkillされなければ良いのであれば、
oom_score_adjを調整することで回避できる可能性もあります。
詳しくはmanページをご参照ください。
[atde]$ man 5 proc
:(省略)
/proc/[pid]/oom_score_adj (Linux 2.6.36 以降)
oom_score_adjを0(never kill)に設定することは、Linuxカーネルが正常に動
作できなくなる可能性が上がる為におすすめしません。