web-dev-qa-db-ja.com

スワップスペースを物理メモリの2倍に設定する必要があるのはなぜですか?

Linuxシステムをセットアップする場合、物理メモリの2倍の大きさのスワップスペースを設定するという一般的な提案があります。なぜこれが必要なのか、そしてこの提案がどのようになるのか知りたいのですが。

11
user49137

簡単な答えは「あなたはしない持っているする」です。

カーネル/システムタイプによっては、そのようなスワップスペースのサイズを設定することが理にかなっている場合があります。 FreeBSDのtuning(7)マンページでは、スワップサイズの背後にある論理的根拠が物理メモリサイズの少なくとも2倍であることがわかります。

通常、スワップスペースのサイズは、RAMが2GB未満のシステムの場合はメインメモリの約2倍、それ以上の場合はメインメモリの約1倍にする必要があります。ただし、RAMがあまりない場合は、通常、より多くのスワップが必要になります。システムに256M未満のスワップを構成することはお勧めしません。また、スワップパーティションのサイズを決定するときは、将来のメモリ拡張に留意する必要があります。カーネルのVMページングアルゴリズムは、メインメモリに対して少なくとも2倍のスワップがある場合に最高のパフォーマンスを発揮するように調整されています。スワップの構成が少なすぎると、VMページスキャンコードと、後でマシンにメモリを追加すると問題が発生します。最後に、複数のSCSIディスク(または複数のIDE異なるコントローラーで動作するディスク)を備えた大規模なシステム)では、各ドライブでスワップを構成することをお勧めします。ドライブのスワップパーティションはほぼ同じサイズである必要があります。カーネルは任意のサイズを処理できますが、内部データ構造は最大のスワップパーティションの4倍に拡張されます。スワップパーティションをほぼ同じサイズに保つと、カーネルがN個のディスク間でスワップスペースを最適にストライプ化できるようにします。少しやり過ぎても心配しないでください。スワップスペースはUNIXの節約の恩恵であり、通常はあまりスワップを使用しない場合でも、回復するための時間を増やすことができます。再起動を強制される前の暴走プログラム。

割り当てるスワップスペースの量、割り当てる場所などを決定するときは、他の要因が重要になる場合があります。たとえば、128 GBの物理メモリを備えた大規模なサーバーをインストールする場合は、使用されないスワップ用に256GBのディスク領域を事前に割り当てることは避けたほうがよいでしょう。

一方、someスワップスペースがあると、カーネルダンプを取得できることがよくあります(Open-、Net-、FreeBSDなど)。したがって、パニック時に完全なカーネルダンプを取得するために、少なくとも十分なスワップスペースを用意することをお勧めします。

allの場合に当てはまる絶対的なルールはありません。特定のシステムの動作について読み、それがどのように機能するかを学び、システムの使用目的を考え、yourのニーズに合うスワップスペースの最適なサイズを決定する必要があります。

8

あなたは全くする必要はありません。古いバージョンのWindowsは、割り当てられたメモリの各ページを基本的にスワップファイルのmmapとして扱うため、少なくとも物理的な合計RAMスワップのサイズが役立つためには、これは必要ありません)今日はもっと長く、Linuxでは決してそうではありませんでしたが、噂は続いています。

ただし、少なくともRAM)と同じ量のスワップがあることが望ましい場合があります-休止状態。Linuxは休止状態(別名、ディスクへのサスペンド)にスワップファイルを使用するため、十分な量が必要です。スワップしてRAM内のすべてのデータに加えて、すでにスワップアウトされているすべてのデータ(キャッシュRAMを除く)を保持します。これは、もちろん、ラップトップなど、休止状態にする必要があるマシンの場合のみです。

最後に、スワップが多すぎると、他の人が言うかもしれないことにもかかわらず、悪いのことが起こり得ます。考えてみてください。4GのRAMがあり、さらに8Gのスワップが必要な場合、システムは引き続き使用可能だと思いますか。ディスクとの間のすべてのスワップで何が行われているのでしょうか。多くの場合、スワップの内外でデータのマーシャリングにすべての時間を費やし始めたときにシステム全体が使用できないレベルまで遅くなるよりも、メモリが不足したときにすぐにメモリを消費するプロセスを強制終了する方がよいでしょう。

5
bdonlan

ずっと前に、スワップスペース内のすべての仮想メモリページを割り当てる一般的なunixバリアント(BSDだったと思いますが、現在は参照が見つかりません)がありました。したがって、RAMと同じくらい多くのスワップがある場合でも、仮想メモリのサイズはRAMと同じになります。その場合、通常の推奨事項は、RAMの2倍のスワップを使用することでした。これにより、仮想メモリはRAMの2倍の大きさになりました。

現代のユニスはそのように動作しないので、ルールの理由は廃止されました(1992年にすでに廃止されたと思うので、Linuxには関係ありませんでした)。しかし、奇妙なことに、ルールは存続しました。今それに従うと、RAMの3倍の量の仮想メモリが得られますが、当初の目的は2倍の量を取得することでした。

ルールの背後にある歴史的な理由が間違っているからといって、それが愚かであるという意味ではありません。ディスク容量が安くなったので、より多くのスワップを割り当てることは理にかなっています。必要なスワップの量は、RAMの量とその使用方法によって大きく異なります。スワップなしでシステムを実行することはできますが、何を選択するかはわかりません。 RAMがいっぱいになり、システムが遅くなる可能性がある場合に強制終了するプログラム(キャッシュにRAMを使用して、プログラムメモリをスワップアウトする方がよい場合があります) 。あまりにも多くのスワップを割り当てると、少量のRAM(カーネルデータ構造の場合)ともちろんディスクスペース(ただし、最近では、SSDを除いて通常はかなり安い)のコストがかかります)。休止状態にする場合は、仮想メモリが必要です。

一般的なシステムメモリ容量、メモリバス速度とディスク速度、およびプロセスがさまざまな待機状態で費やす時間の割合に関する仮定に基づく古代の推奨事項。最近では、スワップスペースに1/2以上の物理メモリが必要になるのではないかと疑っています。これは、メモリがほぼ完全に使用されているときにランダムにOOMが強制終了するのを防ぐのに十分です。ただし、通常のワークロード、YMMVなどに完全に依存します。

0
llasram