web-dev-qa-db-ja.com

Linux Webサーバーのスワップを完全にオフにする必要がありますか?

最近私の友人は、十分なメモリのあるLinuxウェブサーバーでスワップをオフにすることをお勧めしますと私に言った。私のサーバーには12 GBがあり、ピーク時の負荷では現在4 GB(キャッシュとバッファーは含まない)を使用しています。

彼の主張は、通常の状況ではサーバーがそのRAMのすべてを使用することは決してないので、OutOfMemory状況に遭遇する唯一の方法はいくつかのバグ/ ddos​​などが原因です。 offシステムがメモリ不足になり、最終的にプログラムのホギングメモリ(おそらくWebサーバープロセス)およびおそらく他のいくつかのプロセスがクラッシュします。スワップがオンになっている場合on it RAMとswapの両方を消費し、最終的には同じクラッシュが発生しますが、その前にsshdなどの重要なプロセスをオフロードしてスワップし、多くのスワップ操作を開始して、大幅な速度低下を引き起こします。このようにすると、ddosシステムの下でシステムが巨大な遅延のために完全に使用できない状態になり、ログインしてWebサーバープロセスを強制終了したり、すべての受信トラフィック(sshを除く)を拒否したりできなくなります。

これは正解?何かが足りないのですか(十分なRAMがあっても、スワップパーティションが何らかの方法で非常に役立つという事実など)。オフにすべきですか?

23
Poma

それはあなたのユースケースに依存すると私は言うでしょう、そして残りの答えはこれをかなりうまくカバーしました。結局、4Gのスワップは、いくつかの安全を購入するための安価な方法です。そして、私はこの安さが人々がそれを止めたくないと思っている理由だと感じています。

しかし、修辞的な質問で答えさせてください。お金が問題ではなく、2つのシステムから選択する場合-1つは12GのRAMと4Gのスワップ、もう1つは16GのRAMとスワップなし-どちらのシステムか選びますか?残念ながら、ほとんどの人は16GのRAMを選択し、stillに4Gのスワップを追加すると答えますが、これは私の見当がつきません。

そして別のメモでは、私は個人的に、クラッシュしたシステムよりもスワッピーなシステムを見つけました。システムがクラッシュすると、スタンバイバックアップサーバーが引き継がれます。また、アクティブ-アクティブ(またはロードバランスの設定)では、クラッシュしたシステムは、より早く回転から外されます。スワップなしシステムが再び勝利。

28
chutz

十分なメモリがある場合でも、スワップをオフにすることはお勧めしません。サーバーがより多くのメモリを必要とし、それを取得できなかった場合、サーバーはクラッシュします。ただし、スワップ領域がある場合は、これを(ある程度)防ぐことができます。

はい、スワップを使用するとサーバーのパフォーマンスは低下しますが、少なくとも操作可能でアクセス可能です。その後、サーバーがスワップの使用を開始した場合は、必要に応じてメモリを追加することを計画できます。

このページ スワップについて話しているのを見つけました。 3番目のセクションをご覧ください。

スワップをオフにする代わりに、 swapiness を制御できます。

14
Khaled

いいえ、それは良い考えではありません。 「一部のプロセスがおかしくなりました」とは、積極的にすでに呼び出されている必要があることを意味します

ulimit -d

プロセス作成時またはそれ以前に、プロセスごとのデータセグメントメモリに制限を設定します-おそらくスレッド数の制限

ulimit -T

プロセスごと。 ulimitはあなたの友達です。スワップをオフにする前に、メモリ調整ガイドの1つを読むことを検討してください。カーネルパラメータをいくつか変更して、DOS攻撃や不正なプログラムを処理することもできます。

このように見てください:システムの総メモリはRAM + swapです。12GBのスワップがある場合、システムを効果的にカットするだけですVM容量半分は、スワップを無効にすることによります。悪い考えです。これは議論ではありません。実際、これは何年も前の悪い経験から他の人々が知っていることを単に読んでいるだけです。あなたの友人もいくつかの読書をする必要があるかもしれません。

6
jim mcnamara

他の人が言ったように、「swappiness」パラメーターをいじることでどうしても必要な場合を除いて、swapを使用してサーバーを効果的に停止できます。これは、カーネルがメモリページをどれだけ積極的にスワップアウトするかを制御します。

現在の設定は次のとおりです。

cat /proc/sys/vm/swappiness

そしてあなたはそれを(ルートとして)「ライブ」で編集できます:

# echo "10" > /proc/sys/vm/swappiness

そしてそれを持続させるために、以下を/etc/sysctl.confに追加します:

vm.swappiness=10
5

あなたができる別の良いことは、RAMをzRAMを使用してスワップすることです。これは素晴らしいアイデアだと思います!パフォーマンスに関しては、まったくスワップがないようなものですが、システムは非常にロードされています!

これを見てください:

http://www.webupd8.org/2011/10/increased-performance-in-linux-with.html

私の経験:今書いているこのマシンで、スワップを無効にしたので、4Gbが発生しましたRAM(2009年にはそれは非常に多かったです!)そのうちの1つが誤って127枚の写真を同時に開いていました。

しかし、これはワークステーションであり、ハングした場合は再起動する余裕があります。サーバーではスワップがある方がいいと思います。スワップインRAMは私にとっては良さそうです。

2
CyberPlant

すでに十分に明らかにされているように、これは良い考えではありません。他に何もない場合は、swapを使用すると、異常な状況が発生した場合の呼吸スペースが確保されます。例えば私が見ている1つのシステム(通常は1日あたり数人の訪問者しかいない)で、雑誌に記載されているページが原因で大規模なトラフィックの急増がありました。これにより、Webサーバーは、稼働して以来初めてスワップ領域を使用しました。そのスワップ空間がなければ、物事はあまりうまくいきませんでした。

1
John Gardeniers

良い考えではありません。優先度の異なる2つのスワップファイルを定義できます。使用中の小さい方と、最初の塗りつぶしに使用される大きい方。

また、vm.swappinessは、ディスクスワッピングの発生頻度を制御するのに役立ちます。

0
Dragos

Vm.swappinessに0を設定しても、必ずしもシステムがスワップしないわけではありません。これは、スワップに対する積極的なカーンの傾向を決定するためのパラメーターですが、スワップをオフにしません。

繰り返しますが、スワッピングは悪くありませんが、スラッシングは悪いです。 sysstatデータを見てください。これにより、かなり良い指針が得られるはずです。

0