ほとんどの人は、スワッピング=悪いと信じており、swappinessを減らさないと、本当に必要のないときにシステムがスワップするからです。どちらも本当ではありません。しかし、それは主にスワップだ-人々は、彼らのシステムが泥沼なっている時代にスワップ関連付けるためのシステムが逆ではない、動きが取れなくなっています。システムがスワップするときは、スワップの決定にパフォーマンスコストを既に考慮しており、そうしないとシステムのパフォーマンスまたは安定性に大きなペナルティが生じると判断しました。
全体的にデフォルト設定により、全体的なパフォーマンスと安定性が良好になります。デフォルトのままにしておくことをお勧めします。Linuxのメモリ管理を改善していくつかのエッジケースを解決する手段はさらにありますが、概して、swapinessコントロールは良い回避策ではありません。一方向に調整すると、1つの問題を修正し、他の問題を作成できます。可能な場合は、物理RAMを増設するだけで(スワップ性はそのままにして)、他のすべての救済策を覆します。
LinuxがRAMを使用する方法
アプリケーションで使用されていないRAMは、「キャッシュ」として使用できます。キャッシュは、高速でスムーズに実行されるシステムにとって重要であり、ディスクへの読み取りと書き込みの両方を高速化します。
アプリケーションのメモリ使用量がほぼすべてのRAMを使用するまで増加すると、キャッシュが縮小し、結果としてディスク操作が平均的に遅くなります。最近のキャッシュでは、数十メガバイト以下で十分ではありません。
スワップスペースがないと仮定して、アプリケーションのメモリ使用量がさらに増加すると、キャッシュ用のスペースがなくなるだけでなく、最終的にメモリが不足し、システムは実行中のプロセスを強制終了する必要があります。プロセスを強制終了すると、システムが不安定で予測不能になるため、速度低下よりも悪化します。
Linuxでのスワップの使用方法
これらの問題の両方に対処するために、システムは、めったに使用されないアプリケーションメモリをディスク上のスワップ領域に再割り当てして、RAMを解放できます。RAMを追加すると、メモリ不足によるプロセスの停止を防ぐことができます。また、ディスク操作をよりスムーズに実行できるように、少量のキャッシュを再利用できます。
ただし、この再割り当ては、明確なカットオフに従っては行われません。Linuxがスワッピングを開始するまで、割り当ての特定の割合に到達しません。「ファジー」アルゴリズムがあります。それは多くのことを考慮に入れていますが、これは「メモリ割り当てにどれほどのプレッシャーがあるか」で最もよく説明できます。新しいメモリを割り当てるための「プレッシャー」がたくさんある場合、より多くのスペースを確保するためにスワップされる可能性が高くなります。「プレッシャー」が少ない場合、これらの可能性は減少します。
システムには「スワップ」設定があり、この「圧力」の計算方法を微調整できます。多くの場合、「RAMの割合」として誤って表されますが、そうではなく、単に式の一部として使用される値です。40から60前後の値が推奨される正気値で、現在は60がデフォルトです。
大量のRAMが搭載されている場合でも、システムを必要なときにスワップさせることは、全体的に非常に良いことです。必要に応じてシステムを交換すると、一時的にでも(多くのメモリを使用する短いプロセスを実行中に)低メモリ状態に陥った場合に、システムがすべてを実行し続けるチャンスを得ることができます。スワップを完全に無効にする場合、メモリを割り当てられないためにプロセスが強制終了される危険があります。
システムが行き詰まり、頻繁に交換されるとどうなりますか?
スワップは低速でコストのかかる操作なので、システムはキャッシュパフォーマンスのトレードオフが全体を補うと計算しない限り、またはプロセスの強制終了を回避する必要がある場合は回避します。
多くの場合、人々はディスクをひどくスラッシングしているシステムを見て、多くのスワップスペースを使用し、それを交換することを非難します。それは取るべき間違ったアプローチです。スワッピングがこの極端に達する場合、スワッピングはシステムがメモリ不足の問題に対処しようとするものであり、問題の原因ではなく、実行中のプロセスをスワップしないとランダムに停止することを意味します。
デスクトップシステムはどうですか?彼らは別のアプローチを必要としませんか?
実際、デスクトップシステムのユーザーは、アプリケーションを開くなど、ユーザーが開始したアクションに応答してシステムが「応答性を感じる」ことを期待しています。
一部の人々がこれを微調整しようとする1つの方法は、swappinessパラメータを減らすことです。これにより、メモリを使用し、キャッシュスペースが不足しているアプリケーションに対するシステムの許容範囲が増加します。
ただし、これはゴールポストを変えるだけです。最初のアプリケーションはスワップ操作なしでロードできるようになりましたが、ロードする次のアプリケーションのスラックが少なくなります。代わりにアプリケーションを次に開くときに、同じスワッピングが後で発生する場合があります。それまでの間、システムのパフォーマンスは、キャッシュサイズの削減により全体的に低下します。そのため、swapiness設定を減らすことによる利点は測定が難しく、一部の時点でスワッピングの遅延は減少しますが、他の時点ではパフォーマンスが低下する可能性があります。何をしているのかわかっていれば、swappinessを少し減らすことは正当化されるかもしれませんが、10%にまで減らすと、システムが非常に低いキャッシュサイズに耐えられるようになり、システムがすぐにスワップしなければならなくなる可能性が高くなります。
プロセスがクラッシュしたり強制終了したりする可能性があるメモリ不足状態に対する追加の保護が失われるため、スワップを完全に無効にすることは避けてください。
最も効果的な解決策は、余裕がある場合はより多くのRAMをインストールすることです。
とにかく大量のRAMを搭載したシステムでスワップを無効にできますか?
アプリケーションに必要と思われるよりもはるかに多くのRAMがある場合、スワップはほとんど必要ありません。スワップを無効にしても、ほとんどの場合、おそらく違いはありません。ただし、RAMが十分にある場合、システムは必要のないときにスワップしないので、スワップを有効にしたままにしてもペナルティはありません。
違いを生む唯一の状況は、システムがメモリ不足に陥り、その結果キャッシュシステムが妨げられているという、ありそうもない状況であり、このタイプの状況で最もスワップが必要な状況です。したがって、十分なメモリがある場合にマイナスの影響を与えることなく、安心して通常の設定でスワップを安全に残すことができます。
しかし、どうすればスワップでシステムを高速化できますか?スワップの速度が遅くなりませんか?
RAMからスワップにデータを転送する動作は遅い動作ですが、適切なキャッシュサイズを維持することの結果としての全体的なメリットがこれを上回るとカーネルが確信している場合にのみ行われます。
データがスワップされると、いつ再びデータが出ますか?
メモリの特定の部分は、使用されるとすぐにスワップから復帰します-読み取りまたは書き込み。ただし、通常、スワップされるメモリは、長時間アクセスされておらず、すぐに必要になるとは予想されないメモリです。
スワップからデータを転送するには、そこにデータを入れるのと同じくらい時間がかかります。必要のないカーネルは、カーネルからデータを削除しません。データがスワップであり、使用されていないが、それは他のもののためのより多くのメモリ残され使用されて、多くのシステムキャッシュを。
swappinessを減らすことが適切な場合はありますか?
はい。システムキャッシュの恩恵を受けない特定のサーバーアプリケーション専用のサーバーを実行している場合。Oracleサーバーなどの一部のデータベースサーバー、MySQL / MariaDBは、これらのデータベースエンジンが独自のキャッシュを使用するため、swappinessを1〜10に減らすことを推奨する場合があります。
これは、システムがその1つのタスク専用である場合にのみ当てはまることに注意してください。MySQL/ MariaDBの場合は、MyISAMやAriaなどではなく、純粋にInnoDBまたはXtraDBを使用している場合のみです。