togotoday
2015年2月5日 17時21分
大変お世話になります。坂本と申します。
当方の質問に対し
いつもいつも、ご回答ありがとうございます。
この度は、カーネルパラメータ vm.min_free_kbytesの適正値に関しまして、
質問させて下さい。
armadillo-840にてメモリ不足に起因する(memory allocation failure)様々な問題を抱えています。
原因は概ね、USBテザリングで使用しているドライバーのリークではないかと見当はついているのですが、
客先運用上、その点に関してはすぐに手当できない状況です。
そこでフリー(残)メモリー容量の最低値を増やす方向で見当しており、
カーネルパラメーターを精査しているところです。
質問ですが、
1. vm.min_free_kbytesの値ですが2880という値になっております。これはAtmark-Dist でのデフォルト値
でしょうか?そうでなければデフォルト値を教えて下さい←(その値が小さく感じられたので、PC上の例えばDebianなどで
はどうなっているのか見てみたところ、例えば44904という値になっておりました。)
2.もしこれがデフォルト値であれば、通常の使用方法では2880という値で特に問題ないということでしょうか。
3.現状、空きメモリがキャッシュとして使われ、またJavaのプログラムが消費するため、よく容量不足に見舞われます。
そこでですがvm.min_free_kbytesにて最低値を増やせば、その分だけ空き容量をキャッシュにまわされずに済む、という認識で正しいでしょうか。(キャッシュの再利用不能な分に関してですが)
あくまでもドライバーのメモリーリークという問題が根本ですが、どうかその部分はお含み頂き、ご回答のほど
何卒お願い申し上げます。
at_yashi
2015年3月11日 14時14分
返事が遅くなってすみません。
> 1. vm.min_free_kbytesの値ですが2880という値になっております。これはAtmark-Dist でのデフォルト値
> でしょうか?そうでなければデフォルト値を教えて下さい←(その値が小さく感じられたので、PC上の例えばDebianなどで
> はどうなっているのか見てみたところ、例えば44904という値になっておりました。)
Atmark Distというより、Linuxカーネルがシステムメモリの総量から計算し初
期化します。そのため大量のメモリを持つ PC では大きく、Armadillo のよう
に 1GB程度のメモリしか持たいものは、相対的に小さな値に初期化されます。
> 2.もしこれがデフォルト値であれば、通常の使用方法では2880という値で特に問題ないということでしょうか。
問題は無いと考えます。この値を大きくするとカーネル自体が freeメモリを
常時確保しようするので、他にメモリが渡らない状態になりやすくなります。
結果 OOM が発生しやすくなると考えます。
> 3.現状、空きメモリがキャッシュとして使われ、またJavaのプログラムが消費するため、よく容量不足に見舞われます。
> そこでですがvm.min_free_kbytesにて最低値を増やせば、その分だけ空き容量をキャッシュにまわされずに済む、という認識で正しいでしょうか。(キャッシュの再利用不能な分に関してですが)
キャッシュにまわっているメモリは、アプリケーションがメモリを必要とした
時に、カーネルが十分なメモリを確保できなければ回収され、アプリケーショ
ンに渡されます。その閾値を決めているのが min_free_kbytes だと理解して
います。
なので、min_free_kbytes を大きくすると、キャッシュなど再利用可能メモリ
からの回収が早くなると思います。