GNU/Linux >> Linux の 問題 >  >> Linux

vm.overcommit_ratio の残りのメモリはどこに行くのですか?

<ブロック引用>

システムは残りの 20% で何をしますか?

カーネルは残りの物理メモリを独自の目的 (内部構造、テーブル、バッファ、キャッシュなど) に使用します。メモリのオーバーコミット設定は、ユーザーランド アプリケーションの仮想メモリの予約を処理します。カーネルは仮想メモリを使用せず、物理メモリを使用します。

<ブロック引用>

そもそもなぜこのパラメータが必要なのですか?

overcommit_ratio パラメータは、アプリケーションが将来、つまり実際にメモリにアクセスする (または少なくともアクセスしようとする) ときに、合理的に利用できるものよりも多くの仮想メモリを予約することを防ぐために設計された実装の選択です。

設定 overcommit_ratio Linux カーネル開発者は、50% までが妥当なデフォルト値であると考えています。これは、カーネルが物理 RAM の 50% 以上を使用する必要がないことを前提としています。走行距離は異なる場合があります。これが調整可能である理由です。

<ブロック引用>

常に 100% に設定すべきではないのはなぜですか?

100% (または「高すぎる」値) に設定しても、カーネルが RAM の 0% (または少なすぎる) を使用すると想定できないため、オーバーコミットを確実に無効にすることはできません。

カーネルが必要とするすべての物理メモリを先取りする可能性があるため、アプリケーションのクラッシュを防ぐことはできません。


比率を 100% に設定すると、ファイルに基づくページ、またはカーネル コード、ネットワーク バッファーなどのカーネル内割り当て用のスペースは予約されません。

カーネル内構造は関係なく割り当てられ、オーバーコミットが発生します。通常、それらは個別に制限されています (たとえば、ネットワーク バッファーの設定があります)。 50% という全体的な制限はないと思いますが、全体的な制限はコンテナーをホストする目的で取り組んできたものです。

ファイルに裏打ちされたページは通常、ユーザー空間コードを実行する場所であるため、そのためのスペースも必要です。


Linux
  1. カーネル専用のメモリの使用状況を監視するには?

  2. カーネルはどれくらいの RAM を使用しますか?

  3. ブート時にカーネル全体がメモリにロードされますか?

  1. Linuxカーネルをftraceで分析する

  2. ARM システム コールのインターフェイスは何ですか? また、Linux カーネルのどこで定義されていますか?

  3. RHEL6 の gem コマンドはどこにありますか?

  1. Linux カーネルの /proc の内容はどこに文書化されていますか?

  2. /proc/sys に存在する Linux カーネル パラメータはどこに記載されていますか?

  3. Linux カーネルからメモリのブロックを予約するにはどうすればよいですか?