次の場合は、スワップを無効にすることをお勧めします
- ソフトウェアは、メモリ不足の状態に適切に対処したり、OOM の状況を回避するように自身を制限したりできます
- 一貫したパフォーマンスを維持することが重要です (システムをスワップするとレイテンシが増加し、多くのアプリケーションにとって実質的に役に立たなくなる可能性があります)
この種のことは、データベースでよく起こります。 noSQL データベースでよく見られますが、リレーショナル データベースでも同じ問題が発生する可能性があります。
スワップが必要なOSには何もありません。 Linux は、メモリを要求した最後のプロセスを強制終了することで、これを非常に適切に処理します。その点に到達したくないので、Oracle を調整してメモリの最大 90% のみを使用するようにし、システム デーモンとエラーのマージンがいくらか残るようにします。 「空き」メモリはディスク I/O のバッファリングにも使用され、パフォーマンスが大幅に向上します。そのため、データベース自体がより多くのメモリを消費しようとすると、最終的にシステム全体のパフォーマンスが低下し、逆効果になります。
アプリケーションがデータベースであるか、キャッシュであるか、または同様のシステムであるかという質問からのメモリの一部を備えたシステムであっても、この時点でデフォルトでスワップしないようにします。
当局
私の言葉だけに頼らないように:
カサンドラ
Datastax は Cassandra について説明します:
<ブロック引用>スワップを完全に無効にする必要があります。そうしないと、パフォーマンスが大幅に低下する可能性があります。 Cassandra には複数のレプリカと透過的なフェイルオーバーがあるため、メモリが少なくなったときにレプリカをスワップするよりもすぐに強制終了することをお勧めします。これにより、スワッピングが原因でレイテンシーの高いレプリカにヒットし続ける代わりに、トラフィックを機能しているレプリカに即座にリダイレクトできます。システムに大量の DRAM が搭載されている場合でも、ディスクをキャッシュするためにより多くの DRAM を使用できるように OS が実行可能コードをスワップ アウトするため、スワッピングによってパフォーマンスが大幅に低下します。
リアク
芭蕉は Riak に次のように説明します:
<ブロック引用>
理想的には、スワップを無効にして、Riak のプロセス ページがスワップされないようにする必要があります。スワップを無効にすると、Riak がメモリ不足の状況でクラッシュする可能性があります。 erl_crash.dump
という名前のクラッシュ ダンプ ファイルが残ります。 、/var/log/riak
メモリ使用量の原因を特定するために使用できるディレクトリ。
mysql
Percona はフェンスの上に座っており、質問の両側に役立つ警告を提供しています。 MariaDB はスワップを無効にすることに同意しません:
<ブロック引用>スワップを完全に無効にするものもあれば、データベース プロセスがそれを使用するのを確実に避けたいと思うものもありますが、少なくともスパイクが発生した場合にカーネルが適切にフォールオーバーできるように、スワップ スペースをいくらか残しておくことをお勧めします。緊急スワップを利用できるようにすることで、暴走したプロセスを強制終了するスコープを確保できます。
サーバー障害
ここで好評を博した回答には次のものがあります。
<ブロック引用>個人的には、swappy システムはクラッシュしたシステムよりも悪いと思います。システムがクラッシュすると、スタンバイ バックアップ サーバーがより早く引き継ぐようになります。また、アクティブ/アクティブ (または負荷分散の設定) では、クラッシュしたシステムはより早くローテーションから外されます。ノースワップシステムの勝利。
その回答には今日 22 の賛成票があり、4 歳です。スワップの価値を称賛する他の回答もいくつか見られますが、データベースを実行していることを示すものはありません。彼らもそれほど多くの賛成票を持っていません。 :)
イカ
スワップを無効にすることをあからさまに推奨しているわけではありませんが、イカの連中は次のように言っています。
<ブロック引用>Squid は少しメモリを食い尽くす傾向があります。メモリをさまざまなことに使用しますが、その中には他のものよりも制御しやすいものもあります。 Squid プロセスのサイズがシステムの RAM 容量を超える場合、プロセスの一部のチャンクを一時的にディスクにスワップする必要があるため、メモリの使用は重要です。同じシステムでメモリを大量に消費する他のアプリケーションが実行されている場合にも、スワッピングが発生する可能性があります。スワップすると、Squid のパフォーマンスが急速に低下します。
これはデータベースに起こりたくないことです。
レディス
redis はスワップを公式に推奨していますが、ユーザーはそれを購入しません:
<ブロック引用>最初に swap を無効にします - Redis と swap は簡単には混ざりません。これは確かに速度低下の原因となります。
ハドゥープ
この回答に見られるように、hortonworks コミュニティで最も多くの票を獲得しています:
<ブロック引用>スレーブ/ワーカー/データ ホストの場合 分散サービスしかない場合は、スワップを無効にすることができます。分散サービスでは、スワップではなくプロセス/ホストを強制終了することをお勧めします。そのプロセスまたはホストを強制終了しても、クラスターの可用性には影響しません。別の言い方をすれば、「ゆっくりと劣化する」のではなく、「早く失敗する」必要があるということです。
[....]
達人向け 、スワップも無効になっていることがよくありますが、これは Hortonworks の設定されたルールではなく、議論/意見の相違があると思います.マスターは、Hadoop 以外の他の環境でマスターを扱うのと同じように扱うことができます。
マスターでスワップを無効にすることの懸念は、OOM (メモリー不足) イベントがクラスターの可用性に影響を与える可能性があることです。ただし、スワップが構成されていてもそれは発生しますが、少し時間がかかります。管理者/オペレーターにとって適切な方法は、RAM の可用性を監視し、メモリが不足する前に問題を修正することです。したがって、パフォーマンスに影響を与えることなく可用性を維持します。その場合、スワップは必要ありません。
Java アプリについて話しているので、私はこれが好きですが、データベースについて上で述べたのと同じ結論に達します。また、監視についても言及しています これは、高性能アプリケーションのチューニングに非常に役立ちます。比較する数字がない場合、すべては比較するのが難しい感情に基づいています。アプリケーション レベルのレイテンシとスループットから CPU、ディスク、メモリ、ネットワーク グラフまで、測定可能なすべてのメトリックのグラフを作成します。これらは、意思決定を行う必要がある実際のデータの大部分を提供します。