Armadilloフォーラム

カーネルパラメータ vm.min_free_kbytesの値につきまして

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にて最低値を増やせば、その分だけ空き容量をキャッシュにまわされずに済む、という認識で正しいでしょうか。(キャッシュの再利用不能な分に関してですが)

  あくまでもドライバーのメモリーリークという問題が根本ですが、どうかその部分はお含み頂き、ご回答のほど
  何卒お願い申し上げます。

 

コメント

返事が遅くなってすみません。

>   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 を大きくすると、キャッシュなど再利用可能メモリ
からの回収が早くなると思います。