Linux:スワップパーティションを作成しませんか?


9

RAM(8GB)がたくさんあるので、外出中にスワップが使用され、RAMが多すぎるとスワップが悪いと聞いたので、私は不思議に思っていました。

スワップパーティションを作成しないとどうなりますか?

また、冬眠に必要ですか、それは必須ではありませんか?


あなたはスワップを作成する必要があります、私は一度スワップを作成しないようにしてみましたが、インストールを進めることができませんでした
-Lynob

Windows内にインストールするとどうなりますか?私はそれを行い、窓と比較してリグでも少し遅いように見えましたが、パーティションを作成しませんでした
Mihai Bratulescu

LinuxをWindowsにインストールしようとしたことはありません。常に別のパーティションを作成します
Lynob 2013

回答:


13

最新のオペレーティングシステムでは、RAMを効率的に使用するためにスワップスペースが必要です。システムに十分なRAMがある場合でも、RAMを浪費するとバッファキャッシュが小さくなり、ディスクI / Oが増加します。したがって、RAMの容量に関係なく、システムでそれを効率的に使用する必要があります。これを効率的に使用するということは、アクセスされる可能性が極めて低いものをRAMから取り出すことを意味します。

一般的なシステムを起動すると、多数のサービスが起動します。プログラムは初期化コードを実行し、プロセス内のプライベートメモリマッピングを変更します。これらのサービスの多くは二度と実行されません。それらの多くは何時間も実行されません。スワップがなければ、OSは、これらのサービスに関連付けられた変更されたプライベートメモリマッピングをRAMに永久に保持する以外に選択肢がありません。それはディスクキャッシュとして決して使用できないRAMです。

そのため、必要かどうかに関係なくスワップが必要です。


8
「だから、あなたはそれが必要かどうかにかかわらずスワップが欲しい。」-彼が望んでいるかどうかにかかわらず、彼はスワップが必要だと主張したようです。
おがくず

2
十分なRAMがあり、2GBを浪費する余裕があると仮定します。スワップファイルが必要なのはなぜですか?
タリック

1
その場合、スワップファイルは必要ありません。しかし、私が議論したように、あなたはそれが欲しいです。RAMを浪費する余裕があるかどうかに関係なく、必要のないときにRAMを非効率的に使用したくないはずです
デビッドシュワルツ

スワップなしでCLIサーバーを実行していますが、完全に実行されます。Teamspeak3サーバー、apache2、node.jsを実行する500Mを超えるRAMが使用されていることはありません。したがって、RAMを「非効率的に」使用することは気にしません。また、開発中にメモリリークが発生した場合、OOMキラーはすべてのナンセンスをディスクにプッシュするよりも、RAMがなくなるとすぐにそれを削除します。
ネイティブコーダー

11

ここ数年、スワップなしでデスクトップシステムを実行してきましたが、順調に進んでいます!異なる動作がいくつかあります。これらのいくつかは有利であり、いくつかはあなたを傷つけるかもしれません。それはすべてあなたが何をしているかに依存します。

1つの大きな違いは、メモリがなくなったときのシステムの動作です。

スワップパーティションがない場合、OOMキラーはすぐに実行されます。プログラムがメモリをリークしている場合、それが殺される可能性が高いです。それが起こり、ほぼ瞬時にシステムを回復します。

スワップパーティションある場合、カーネルはメモリの内容をスワップにプッシュします。エラープロセスは、メモリの割り当てを続行できます。これは、スワップがなくなるまで続きます。スワップパーティションが大きい場合は、10分から1時間になることがあります。これを実行している間、システムの速度は低下します。ターミナルを開いてプロセスを強制終了することは不可能になります。私は通常、これが発生したときに電源コードを抜きます。

私は私のデータを失うつもりですので、だから、とにかくときにシステムOOMs、私は、少なくとも回復の(高い)チャンスがあるに旧オプションを好みます。


これも私の経験でした。Linuxは、問題のあるプログラムを自分で強制終了できるほどスワップスラッシングを十分に処理しません。OOMキラー自体に実行させる方がより信頼性があります。もちろん、これはひどい設計です-より良いものは、それを強制終了するのではなく、問題のプロセスを凍結し、それを解凍または強制終了できる素敵なGUIを提供することですが、... Linuxです。
Timmmm

2
最後に、私自身の経験に合った意味のある応答。「スワップパーティションが必要」の背後にある理論的根拠を理解することはできません。システムを休止状態にする場合を除きます。
タリック

5

ハイバネーションにはスワップが必要です。それ以外の場合は、スワップなしでうまくいくことができます。


したがって、スワップ領域のサイズは、システムにインストールされているメモリのサイズを少し超える必要があります。
mdpc

@mdpc、必ずしもそうではありません。破棄できない使用済みRAMを保持するのに十分な大きさである必要があります(つまり、ディスク上のファイルによってバックアップされたデータ)。
psusi

作成時にどのように推定しますか?パーティショニングは一般に設定後に変更するのが苦痛なので、適切な計画を立て、最悪の場合に備えてくださいませんか?
mdpc

2

スワップ領域があるとパフォーマンスに悪影響を与えると考えるのはよくある誤解です。パフォーマンスに深刻な影響を与えるのは、十分なRAMがないことです。スワップ領域自体は、信頼性を気にしない限り、パフォーマンスに悪影響を及ぼしません。十分なRAMがあると思われる場合でも、パフォーマンスにプラスの影響を与える可能性があります(RAMの不足は報告されません)。

考慮すべき基本的なケースは3つあります。

  • 1:内部カーネルのニーズに十分なRAMがあり、すべてのアプリケーションがRAM上にページのワーキングセットを保持し、バッファーキャッシュがファイルシステムのホットデータのほとんどを格納するための「空き」RAMを保持します。

  • 2:上記と同じですが、バッファキャッシュを完全に効率化するための十分な空きRAMがありません。

  • 3:アプリケーションが使用するページを保存するのにも十分なRAMがありません。

プロダクションマシンの標準であるケース1では、スワップ領域があるかどうかは何も変更しません(少なくともLinuxベースのOSおよびメモリをオーバーコミットする他のOS)。

ケース2では、スワップ領域があると、システムが非常に頻繁に使用されないページをページアウトできるようになり、バッファキャッシュがその役割をより適切に果たすことができるため、全体的なパフォーマンスが向上する場合があります。

ケース3では、スワップ領域があると、ページネーションによるパフォーマンスの低下を犠牲にして、アプリケーションを実行し続けることができます。一方、スワップ領域(または十分な大きさ)がないと、アプリケーションがランダムにクラッシュします。さらに、OSの設定によっては、OOMキラーは、RAMの需要が高い場合に(ユーザーの)重要なデータを保存する機会を与えずに、最もメモリを消費するアプリケーションを強制終了することもあります。

後者の場合は、選択する必要があるケースです。応答時間が非常に重要であり、トランザクション/プロセスを失うことが大した問題ではないシステムのように、プロセスを強制終了することが好ましいオプションであるユースケースが確かにいくつかあります。

ただし、ほとんどの状況では、ユーザー/管理者がRAMの不足に気づき、データを失うリスクなしにそれに応じて行動できるようにする方がよいと考えがちです。


0

スワップパーティションを使用したくない場合は、スワップファイルを使用できます。通常のファイルに保存され、スワップスペースとして使用されるファイルシステムイメージです。

次の記事では、その方法を詳細に説明しています。


スワップファイルとスワップパーティションの違いは何ですか?そして、私が何も持っていない場合はどうなりますか?
ミハイブラトゥレスク

アクセスの速度....
mdpc

2
YESを使用すると、非常に重要です。パーティションを使用する場合、それは単純なアドレス指定です。ファイルを使用する場合は、スワップファイルを使用するためにすべてのファイルシステムのオーバーヘッドを行う必要があり、ディスク上のセグメントの場所を保証できません。
mdpc

2
@mdpcカーネル2.6以降、ファイルシステムのオーバーヘッドは無視できます。メタデータ、キャッシュ、およびファイルシステムのコードはバイパスされます。Rawディスクブロックには、単純に直接アクセスします。
jlliagre

1
@mdpcスワップファイルは、最近作成しない限り、大幅に断片化されるべきではありません。さらに、スワップアクセスはめったにシーケンシャルではありませんが、デマンドページングがどのように機能するかによってほとんどがランダムであるため、フラグメンテーションは問題になりません。
jlliagre

0

少し危険ですが、スワップスペースなしで実行できます。しかし、最終的にメモリ量を超えた場合、システムはほぼ即座に予告なしにクラッシュします。

スワップは基本的に拡張されますが、メモリの速度ははるかに遅くなります。超えた場合、スワッピングが開始され、システムの寿命が実際に失われます。しかし、誤ったプロセスを停止することで、システムを保存できます。

一部のプログラムは、スワップスペースの割り当てを要求します(使用しません)。これらの一部は、思い出すとデータベースプログラムです。繰り返しますが、スワップ領域を持たないことにより、実行できるプログラムを制限する場合があります。

最後に、エリアをバックアップする必要がないという点で、SWAPは安価です。(私はあなたが彼らのシステムをバックアップするこれらの素晴らしい傑出したシステム管理者の一人であることを望んでいます)。

それを作成します。

私の経験則は、以前は2 * memory-size .....でしたが、今では多くの場合1 * memory-sizeで大丈夫ですが、一般的には1.5 *(memory-size)を使用しています。これほどの量を作成する必要はありませんが、私は...特に、あなたが行っている制作タイプの仕事がある場合はそうします。

ああ、そして冬眠には、メモリの全体像を保持するためにスワップが必要です。したがって、h8ibernationを検討している場合、サイズはAT LEAST(1 * memory-size)+ 100MBである必要があります。100MBは、プロセスで必要となる可能性のあるオーバーヘッド用です。


だから...いくつかのプログラムでは、実行するためのスワップ領域が必要ですか?私は8GBのRAMがなくなることを心配していません(不可能ではありませんが)
ミハイブラチュレスク

2xメモリサイズルールは古く、時代遅れです。しかし、いくらかのスワップを持つことは悪い考えではありません。ディスク領域を使いすぎないため、使用されている領域を見逃すことはありません。通常、十分なRAMがある場合は使用されず、スワップにコアをダンプできます。
ヘネス

@Hennes-私のメモを読んでください...「かつてはあった」
-mdpc

0

Linuxスワップは、メモリのプレッシャーが発生するとすぐに非常に厳しい要件を持つようです。症状は、ほとんどすべてのRAMがアクティブなプロセスで使用されている場合、システムがハードにストールし、ハードディスクが暴走することです。

どうして?

バッキングファイルのないページ(通常は動的メモリ割り当てによる)は、スワップがない場合はRAMから削除できません。カーネルは、バッキングファイルが実際に再び必要になった場合でも、バッキングファイルのあるページに頼ります。e。スワップなしでもゴミ箱に入れます!

この微妙な問題の詳細については、このブログ投稿を参照してください。

結論:常にスワップします。

また、大まかなガイドラインとしてのサイズについては、休止状態になっていないと仮定して、RAMの多いシステムでも4〜8 GBを使用します。詳細については、スワップ領域に関するRed Hatのドキュメントを参照してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.