8

Docker コンポーネントを実行しているノードの適切なメモリ監視を作成するのに苦労しています。Prometheus を cadvisor および node_exporter と組み合わせて使用​​します。

ノードごとの使用メモリを決定する最良の方法は何ですか?

方法 1 : この例では約 42% になります

(1-(node_memory_MemAvailable_bytes/node_memory_MemTotal_bytes))*100

方法 2 : 約 80% を与える

(1-((node_memory_MemFree_bytes+node_memory_Buffers_bytes+node_memory_Cached_bytes)/node_memory_MemTotal_bytes))*100

Q2: この違いはなぜですか? これから何を学ぶことができますか?

そこで、決定された個々の指標についてもう少し掘り下げました。

  1. 空きメモリ:私たちの実験では約5%でした

    (node_memory_MemFree_bytes/node_memory_MemTotal_bytes)*100

  2. バッファリングされたメモリ: 約 0.002%

    (node_memory_Buffers_bytes/node_memory_MemTotal_bytes)*100

  3. キャッシュメモリ:約15%

    (node_memory_Cached_bytes/node_memory_MemTotal_bytes)*100

  4. 利用可能なメモリ: 58%

    (node_memory_MemAvailable_bytes/node_memory_MemTotal_bytes)*100

FreeMem + BufferedMem + CachedMem が AvailableMem の周りにあると思います。しかし、それはこの単純な実験の結果ではありません。

Q3: なぜそうではないのですか?

Linux の空きメモリは、空きメモリ + バッファ メモリ + キャッシュ メモリで構成されていると言われています。メモリが不足すると、キャッシュされたメモリが解放される可能性があります。

4

1 に答える 1

5

このドキュメントでは、これらの数値が何を意味するかについて詳しく説明しています: https://github.com/torvalds/linux/blob/master/Documentation/filesystems/proc.rst#meminfo

MemAvailable: スワップなしで新しいアプリケーションを開始するために使用できるメモリ量の見積もり。MemFree、SReclaimable、ファイル LRU リストのサイズ、および各ゾーンのロー ウォーターマークから計算されます。この見積もりでは、システムが適切に機能するためにページ キャッシュが必要であること、および使用中のアイテムが原因ですべての再利用可能なスラブが再利用可能になるわけではないことが考慮されています。これらの要因の影響は、システムによって異なります。

したがって、MemAvailable は、新しいプロセスのためにスワップせずに使用できるメモリ量の見積もりです。FreeMem は MemAvailable に計算される部分のみです。BufferedMem と CachedMem は推定に含まれる場合がありますが、これらは再利用される可能性があるメモリの小さなセクションにすぎません。

バッファ: raw ディスク ブロックの比較的一時的なストレージは、非常に大きくなるべきではありません (20MB 程度)。

キャッシュ: ディスクから読み取られたファイルのメモリ内キャッシュ (ページキャッシュ)。SwapCached を含まない

于 2021-04-28T14:20:48.550 に答える