私はしばらくUnixを使用してきましたが、ここ数年でスワップが時代遅れているような気がしました。
私の主張は次のとおりです(グローバルulimitまたはOOM設定がないと仮定)。
There is little value in swap because if you need to swap out to disk,
odds are it's going to be a vicious cycle where an app will continue
to eat not only real memory, but swap as well until it gets OOM
reaped (_if_ it gets OOM reaped).
If you have swap enabled, it will only prolong this death march to
the detriment of other processes - and in the worst case where the
process is not OOM reaped in a timely manner, grind the system to
a halt.
Without swap, it will probably get OOM reaped sooner (if at all)
パフォーマンスのために調整されたすべてのサービスと同様に、リソース使用量の上限を知ることは、まず調整に重要であり、必要なリソース数を知ることです。
実行中のプロセスを一時停止し、他のタスクのためのスペースを作成するために交換できる場合(一部はありますが、それほど多くはありません)は想像できません。しかし、そうすれば、まだソケットの言葉を失います。 gccを介してコアダンプを強制するか、手動でメモリをコピーすることは機能的に同じです。
組み込みシステムでスワップしたくない(使用可能なメモリが少なくても)、メモリが不足している場合は、セクタあたり100万の書き込みを中断するよりもプロセスを終了することをお勧めします。セクターをコアまでウェアレベリングして週末をリードします。
Unixのひげを交換し続ける説得力のある理由はありますか?
更新された回答と分析:
確認しましたか?- fork() は親プロセスと子プロセスに同じ量のメモリが必要です。
最新のフォーク()書き込み中のコピーPOSIXを使用する子供の場合(通常)LinuxそしてFreeBSD特に推論を通じてOSXを想定しています。私はこれが交換が持っている流行に劣る荷物だと思います。
奇妙なことは、このソラリス記事Solarisがfork()でCopy-on-Writeを使用している場合でも、少なくとも次のものが必要です。2倍(!)fork()が途中でクラッシュしないように、使用可能な仮想メモリの親プロセスサイズ。ソラリス要素一部スワップが時代錯誤的であるという主張を破ります。私は十分なオペレーティングシステムがCoWをこのように正しく実装するので、この神話を取り除くことがスワップというラベルを付ける追加の理由よりも重要だと思います。から。現実を直視しよう現在実際にSolarisを使用している唯一の人は、おそらくOracleの従業員です。ソラリスへの攻撃はありません!
確認済み- tmpfs/ramfsがいっぱいになると、tmpfs/ramfsファイルを簡単に置き換えることができます。
無制限のtmpfs/ramfsを使用しないでください! tmpfs / ramfsが使用するRAMの量を常に明確に定義してください。
合理的な- 「もしあれば」少し交換を行いなさい。
以前、私の上司は「あなたはあなたが知らないことを知らない」という有名な話をしたことがあります。本質的に、あなたはまだ知らない情報に基づいて決定を下すことはできません。しかし、私にとって、これはスワッピングに対する合理的な主張です。アプリケーションがスワップされているかどうかを検出するために実行するアクションの種類が、 malloc() の成功を確認するか、new() が失敗した場合に例外をキャッチするよりも重いと思われます。
これは、デスクトップを実行していてランダムにさまざまなことが発生した場合に役立ちますが、それでも何かが間違っている場合は、スワップ地獄に閉じ込められるのではなく、OOM収穫を受けたほうがよいでしょう。私です。
逮捕された!- 存在するソラリス、交換はいさまざまな理由で重要です。
一時ファイルシステム- 状態tmpfs に使用可能な空き領域の量は、システムの未割り当てスワップ空間の量によって異なります。 tmpfsファイルシステムのサイズは記録されたファイルを収容できるように大きくなりますが、tmpfsユーザー数が多い場合は、いくつかの本質的なトレードオフがあります。 Tmpfs は、ランチャーのデータセグメントとスタックセグメントとリソースを共有します。 tmpfsファイルシステムが最大許容サイズに近づくと、非常に大きなプログラムの実行が影響を受ける可能性があります。 Tmpfsは、4MBのシステムスワップスペースを除くすべてのスペースを自由に割り当てることができます。
スワッピングに関するソラリスの事実と誤解- 状態今日の仮想メモリは、物理RAMとディスクのスワップ領域の合計で構成されています。 Solarisでは、スワップスペースを構成する必要はありません。このオプションを選択すると、RAMがいっぱいになると新しいプロセスを開始できなくなります。。
これが生成できる最大の仮想マップが次のようになることを意味するかどうかはわかりません。メモリ+スワップ、またはramより大きいファイルに対してmmap()などの操作を実行でき、mmap()の遅延初期化に依存できる場合。これでSwapなしでSolarisを実行できますが、他のPOSIXyオペレーティングシステムと比較してユーザーフレンドリーではないようです。
逮捕された!人気のあるLinuxの休止状態ツールは、スワップに依存しているようです。
基本的に、氷タキシード他のバックエンドが存在しますが、休止状態のスワップに依存しているようです。しかし、休止状態が必要なシステムを実行していない場合でも、Linuxではスワッピングは時代遅れであるという主張に固執します。
答え1
スワッピング(ディスク領域)とスワッピング(RAMからディスクへ、またメモリページを再度移動する方法)を混同しないでください。
パフォーマンス上の理由から過度のスワップを避ける必要がありますが、スワップ領域を持つことが必ずしも問題になるわけではありません。
Linuxなどのシステムでは、メモリオーバーコミット、つまりプロセスが使用可能なメモリよりも多くのメモリを割り当てることができ、RAMが不足し、この状況を処理するのに十分なスワップスペースがない場合、OOMキラーがトリガーされます。終了する「正しい」プロセスを選択するために使用されるアルゴリズムを信頼する必要があり、正しく終了する機会なしに1つ以上のプロセスが終了するという事実を受け入れる必要があります。ここで有名な場所があります。織乳これは、OOMキラーがまったく良い考えではない理由を説明しています。
Solarisなどのシステムでメモリをオーバーコミットしたくない場合は、RAMまたはディスク上のメモリ予約が常に仮想メモリによってサポートされていることを確認するのに十分なスワップ領域が必要です。それ以外の場合、RAM は潜在的に重要です。忙しい通り過ぎた。
答え2
技術的に議論に追加することはできませんが、いくつかの例があります。私の古いラップトップ(2 GB RAM kunbuntu lucid)は通常、スワップがゼロの状態で実行されました。転送(ビットトレントクライアント)を実行し、複数のトレント(合計100個の接続可能)を使用すると、交換量が大幅に増加する可能性があります。物理メモリが1GBのXP仮想マシンを実行すると、状況がさらに悪化します。
グラフィックレンダリングのように、メモリ集約的なプロセスもスワップスペースを占めることができるという意見を見た人がいます。たまにだけすれば問題になりません。
スワッピングは、問題を特定し、発生する時点の間に時間がかかるため、OOM問題に関して実際に生命の恩人になることがあります。多くのものが私のメモリをほとんどすべて使っていたので、私はそれに気づいていませんでした。しかし、スワップが実行され始めたとき、私はそれに気づき、問題を見つけ始めました。
答え3
スワップスペースは非常に良い用途に使用されます。 RAM拡張、RAMを使用するストレージデバイスにスワップスペースを配置することで、インストール可能なシステムRAMの制限を克服します。
このデバイスを見てくださいhttp://techreport.com/articles.x/16255 デフォルトでは、S-ATAからDDR2-RAMへのインタフェースです。最大64GBのRAMを搭載できます。これらの1つにスワップスペースを配置すると、かなりの追加のRAMが得られます。もちろん、通常のシステムRAMほど高速ではありません。ただし、これはシステムRAMを追加のキャッシュ層に置き換えるのと同じです。
答え4
私のシステムでは、/ tmpがRAMを使いすぎると、スワップ時にオーバーフローします。
これは、/ tmpを使用する実際のファイルシステムよりはるかに高速です。