私のシステムには常に利用可能な「使用可能」メモリと「非アクティブ」メモリがありますが、システムはスワップのために数メガバイトを移動します。おそらく1泊あたり約100MB程度でしょう。しかし、数日間スワップすると4000MBを超える可能性があります。
システムに必要なメモリをどのように決定しますか?
答え1
FreeBSDメモリを5つのリストに分割する:
- 有線(メモリにロックされており、ページングできません)
- アクティブ(最近使用)
- 非アクティブ(最近使用されていません)
- 隠れ家
- 無料
それらのいくつかは最小無料そして無料対象レベル、例えば
Pool Minimum Target
Free 0.7% 3%
Cache 3% 6%
Inactive 0% 4.5%
(源泉:FreeBSDオペレーティングシステムの設計と実装、かなり古い内容:2004年FreeBSD 5.2をカバーしています。それ以来、数字は変更されましたが、一般的なアプローチはそうではありません。 )
ページデーモンの使命は、レベルを維持し、必要に応じてページを取得することです。
ここで私のFreeBSD 9.0 VMでは、関連する番号は次のとおりです。
hw.availpages: 3138511
vm.stats.vm.v_inactive_target: 121342 # 3.9%
vm.stats.vm.v_free_target: 80895 # 2.6%
vm.stats.vm.v_free_reserved: 4011 # 0.1%
vm.stats.vm.v_free_min: 19221 # 0.6%
vm.stats.vm.v_cache_min: 80895 # 2.6%
vm.stats.vm.v_cache_max: 161790 # 5.1%
(どのように計算されるかはよくわかりません。物理メモリによって異なりますkern.maxusers
。)
FreeBSD利用可能なキャッシュを増やすために積極的にページングされます。したがって、スワップを使用してもシステムがストレスを受けているという意味ではありません。ページング速度やその他の負荷メトリック(ディスクI / OやCPUティックなど)を確認(およびグラフ!)すると、はるかに便利です。systat -io
これが始まりです。 Locate/updatedb を実行することは、一晩メモリ使用量を変更する良い方法です。
使用可能なメモリがある場合でも、スワップを使用することは通常の動作であり、空きメモリがある場合に発生する可能性があるメモリ要件に効果的に対処するため、スワップのみを使用することはRAM要件を決定する信頼できる方法ではありません。 FreeBSDは、調整が必要な時期を知らせるのにとても上手です(grep "see adjusts in file" messages
)。
その他の有用な資料:
答え2
空きメモリがある場合は、メモリを増やしても効果がないため、パラメータを変更する必要がありますswappiness
。非物理メモリ(スワップ)をどのくらいの頻度で使用しているかをカーネルに伝えます。
交換価値を確認してください。
cat /proc/sys/vm/swappiness
一時的なswappiness値(再起動時に失われる)を10(スワップ使用量を減らすのに最適な値)に変更します。
sudo sysctl vm.swappiness=10
永久に変更するには、構成ファイルを使用します。
sudo vim /etc/sysctl.conf
検索してvm.swappiness
希望の値に変更します。
vm.swappiness=10
保存して再起動してください。
説明する:
スイッチとは何ですか?
swappinessパラメータは、プロセスを物理メモリからスワップディスクに移動するカーネルの傾向を制御します。ディスクはRAMよりはるかに遅いため、プロセスをメモリから外に移動しすぎると、システムとアプリケーションの応答時間が遅くなる可能性があります。
交換可能値は 0 ~ 100 の範囲で指定できます。
swappiness = 0は、できるだけ長く物理メモリからプロセスをスワップしないようにカーネルに指示します。
swappiness = 100は、カーネルに物理メモリからプロセスを積極的にスワップしてスワップキャッシュに移動するように指示します。
Ubuntuのデフォルト設定はswappiness = 60です。 swappinessのデフォルト値を下げると、通常のUbuntuデスクトップインストールの全体的なパフォーマンスが向上する可能性があります。 swappiness=10 値が推奨されますが、自由に試してみてください。注:Ubuntuサーバーのインストールにはデスクトップシステムとパフォーマンス要件が異なるため、デフォルトの60がより適している可能性があります。
答え3
簡単な研究では、次のように指摘します。デフォルトでは、swappinessが60に設定されているのはなぜですか? 交換性は、以下でより詳細に説明される。
これ: https://www.kernel.org/doc/Documentation/sysctl/vm.txt すべてのvm関連パラメータがここに説明されています。シングルプロセスメモリ管理が好きな場合は、他のメモリ関連の制限/パラメータを理解するのに役立ちます。
答え4
以前の答えはfreeBSDには適用されませんが、そのままにしておきます。私はそれをテストし、Debianでは魅力のように動作します。 freeBSD の場合、次のコマンドを使用してsysctl
スワップが有効になっていることを確認できます。
-bash-2.05b$ sysctl vm.swap_enabled
vm.swap_enabled: 1
1 - 有効
0 - 無効
次の行を作成して無効にできます/etc/sysctl.conf
。
vm.swap_enabled=0
そしてこのリンクスワップと物理メモリに関する詳細情報を入手できます。