
メモリ不足は一般的な問題であり、公式OOMは効率的ではありません。殺傷作業をより早く完了するために、いくつかの異なるプログラムが導入された。
なぜ殺すのではなく、スワップを作る方法がないのだろうか。スワップのないシステムを考えると、OOMプログラムはプロセスを終了するのではなく起動できますsudo swapon /swapfile
(存在すると仮定)。swapfile
このアイデアを実装するには技術的な制限がありますか?
答え1
これを行うためのプログラムが存在します。 動的交換デーモン例えば。
スワップが必要になる直前に早期に対策を講じる必要があります。スワップファイルの作成、有効化、および無効化はすべて、メモリを使用するタスク(他のタスクと同様)であり、すでに作業しているときはそうしたくないからです。メモリ不足の状況。
必要に応じてRAM使用量を監視するすべてのプログラムはメモリも使用します(RAMをロックするには同様の方法を使用する必要があります)。メモリロックこれにより、必要に応じて交換されません。)
IMO、スワップファイル、またはパーティションを作成してアクティブ化し、忘れてしまうのと比較して、このようなものを使用することには実質的な利点はありません。理論的には素晴らしいようですが、実際には役に立ちません。
答え2
このアイデアを実装するには技術的な制限がありますか?
いいえ、同様のプログラムを引き続き作成できます。スワッピングの問題は、非常に遅く予測不能であり、レイテンシが追加され、一般的なIO操作を妨げ、いくつかのケースでは、RSSが実行されているアプリケーションがある場合は得よりもスレッドが大きくなる可能性があることです。ブロックされた成長制御:要件を満たすためにスワップを作成しようとすると、カーネルが実際に使用しているすべてをスワップし、システムがハングします。
私のアドバイスは常にRAMを追加し、スワップを使用しないことです。物理(使用可能なスロットを持たないノートブック)または金融(共有ホスティング)の制限を超えてRAMを追加できない場合にのみ、スワップを使用する必要があります。
Linuxでは、スワップ領域は休止状態で使用できますが、それはすべてです。私はもはや休止状態を信じていません。これは、非常に遅いランダムIO速度を持つHDDディスク用に作成されたためです。今日のSSDでは、休止状態を使用する理由はほとんどありません。
答え3
ただ使用してくださいzram
これはページの圧縮ストアです。さまざまなLinuxディストリビューション(例:ルブンツ、Fedoraの帽子)とChromeOSとAndroidは、長年にわたってデフォルトでzramを有効にしています。 Androidには、基本的なレガシースワップ機能さえありません。でもWindowsそしてアップルシステム今すぐ使用仮想メモリ圧縮交換する前に
デフォルトでは、zramはメモリをほとんど消費せず、データがページングされた後にのみ圧縮サイズを使用するため、メモリが不足していない場合は、通常のスワップを使用する場合と同様にzramが無料で提供されます。ただし、メモリが制限されるとzramが使用され、CPUがHDDまたはSSDからデータを読み取るよりもはるかに高速にデータを解凍できるため、スワップよりはるかに高速です。確認できますベンチマーク結果はここにあります。基本的なlzoアルゴリズムを使用するzramは、以前のSSDよりもまだ高速です。簡単に変更できますlz4アルゴリズムこれはlzoよりほぼ5倍速いです。圧縮率はやや低いです。今はただZstdに切り替えスピードはあなたを驚かせます
しかもzswap
他のメカニズムを使用しますが、まだ圧縮されたデータをRAMに保存します。