web-dev-qa-db-ja.com

ランドスケープはメモリ使用量をどのように計算しますか?

Ubuntu 12.04サーバーでOOMの状況をデバッグしようとしていて、Landscapeのメモリグラフを見ると、深刻なメモリ使用量のスパイクがないことに気付きました。それからfreeコマンドの出力を見ましたが、両方のメモリ使用量の結果が互いにどのように関係しているかはよくわかりませんでした。

サーバー上のランドスケープの出力は次のとおりです。

$ landscape-sysinfo 
  System load:  0.0               Processes:           93
  Usage of /:   5.6% of 19.48GB   Users logged in:     1
  Memory usage: 26%               IP address for eth0: -
  Swap usage:   2%

それからfreeコマンドを実行すると、次の結果が得られます。

$ free -m
             total       used       free     shared    buffers     cached
Mem:           486        381        105          0          4        165
-/+ buffers/cache:        212        274
Swap:          255          7        248

2%のスワップ使用量は理解できますが、26%のメモリ使用量はどこから来ますか?

6
David Planella

風景の中

landscape-sysinfoは、実際に/proc/meminfoからデータを直接取得します。

dpb@helo:~$ cat /proc/meminfo |egrep 'MemTotal:|Active:'
MemTotal:       12286760 kB
Active:          3794832 kB
dpb@helo:~$

この場合の「メモリ使用量」の計算は次のようになります。

((MemTotal - Active) / MemTotal) * 100

これらの計算は次の場所で確認できます。

/usr/share/pyshared/landscape/sysinfo/memory.py
/usr/share/pyshared/landscape/lib/sysstats.py

/proc/meminfoから直接データを取得します:

無料で

freeユーティリティは、/proc/meminfoからデータを直接取得します。

思い出

  • 合計:MemTotal
  • 使用済み:MemTotal-MemFree
  • 無料:MemFree
  • バッファー:Buffers
  • キャッシュ:Cached

バッファ/キャッシュ

  • 使用済み:MemTotal-MemFree-Buffers-Cached
  • 無料:MemFree + Buffers + Cached

スワップ

  • 合計:SwapTotal
  • 使用済み:SwapTotal-SwapFree
  • 無料:SwapFree

合計

  • 合計:MemTotal + SwapTotal
  • 使用済み:MemTotal-MemFree + SwapTotal-SwapFree
  • 無料:MemFree + SwapFree

修正されたキャッシュ-lzap

9
dpb

これらのグラフは、すべての単一のメモリ割り当て/解放イベントを反映しているわけではありませんが、/proc/meminfo(正確には dpb 記述)のサンプルを一定の間隔で反映しています。グラフに表示されない理由の少し推測的な説明は、メモリ使用量がサンプリングされたポイント間で発生しただけだということです。

ここで起こったことは、いくつかのプロセスが急いで大量のメモリを獲得し、OOMキラーがサンプルを作成する前にそれを破棄したためだと思います。それはかなり極端な状況であり、また、マシン全体が激しくスワップしているため、マシン全体の動作が遅いことを意味します。マシンへのこのロードにより、システムがそのウィンドウ中にメモリ使用量をサンプリングし、Landscapeサーバーに報告するために利用可能な時間を持つ可能性が低くなります。

3
tealeg

Dpbの正解に追加するには、メモリタイプの違いを定義する必要があります。 redhatの/ proc/meminfoのドキュメント

使用する主な定義:

  • Activeメモリは最近使用されたメモリであり、新しいページが取り込まれたときにOSによって置き換えられるべきではありません。
  • MemTotalは、システムにあるusableメモリーの量(物理メモリーから使用されるメモリー量を差し引いたもの)カーネルコード)。
  • MemFreeは現在使用されていないメモリです。ディスクキャッシュとして使用されるメモリは無料ではありません。
  • MemUsedは使用中のメモリ= MemTotal-MemFreeです。
  • Cachedは、ディスク上のファイルのキャッシュとして使用されるメモリです-ディスクからファイルを最近読み込んだ場合、近いうちにもう一度見るかもしれませんそのため、利用可能な場合はメモリに保存しましょう(基本的には無料で、ディスクからの読み取りには数ミリ秒かかり、メモリからの読み取りにはマイクロ秒以下かかるため、コンピューターの速度が劇的に向上します)。
  • Buffersは、IOデバイス用のバッファです。たとえば、ファイルの値を変更すると、最初に保存されます(メインメモリ内の)バッファと、ディスクへの書き込みが遅いため、変更がディスクに書き込まれます。このバッファメモリは寿命が短く、最新のカーネルではごくわずかです。 (キャッシュ/バッファの区別は、最新のLinuxカーネルではあまり明確ではないことを認めた [1] を参照)。
  • MemUsed-Buffers/Cached(空きの2行目の最初の数)は、プロセスが使用するメモリの量です。これは、ディスクキャッシュを無視して使用中のメモリ量です(システムは自由に上書きできます)。

MemUsed-Buffers/Cachedよりも多くのアクティブメモリを簡単に使用できます。このシナリオは、メモリにキャッシュされているディスクの部分に頻繁にアクセスしているときに発生します。同様に、メモリを割り当てたが、その割り当てたメモリを最近使用していないプロセスを使用することもできます。メモリをさらに必要とする場合は、この割り当てられたメモリをスワップに移動することが理想的です。

0
dr jimbob