CentOS 16GBのRAMのスワップ量


11

16 GBのRAMを搭載したデュアルクアッドコアXEONにCentOSをインストールすると、mysqlバックエンド(中/高負荷)を使用してphp Webサイトを実行しますか?

centos  swap 

回答:


20

1ギガまたは2ギガ以下-念のために、そしてそれが物事を少し良くするのを助けるので、少しのスワップを利用可能にしたいが、あなたがひどくスワッピングしているポイントに到達するなら、マシンは行く役に立たないために-そして実際の壊滅的な状況では、OOMキラーを遅らせるよりも早くトリガーするため、実際には小さなスワップスペースを使用する方がよいでしょう。


7
そして、それはいくつかのスペースを作り、(LVMを使用している場合)新しいボリュームを作成するかのようなものとのスワップとしてファイルを使用して必要とされている場合は、後からいつでもスワップ領域を追加できることを覚えておいてくださいdd if=/dev/zero of=swap.file bs=1024 count=1048576; mkswap swap.file; swapon swap.file
デビッドSpillett

3
補足事項として、/ proc / sys / vm / swappiness値を調整することにより、スワッピングの程度を制御できます。
デビッド

2
ここでいくつかの点に同意する必要があります。。。まず、ディスクは安価で、数GBを投じることもできます。第二に、OOMキラーは、運が悪い場合、箱全体を破壊することができます。何らかの方法でそれに依存する、OOMキラーをトリガーする方が良いと考えることは非常に悪い考えです。潜在的な減速よりも潜在的にホース接続されたボックスの方が良いと考えることも悪い考えです。合理的である唯一の時間は、その状況を中心に非常に具体的なセットアップを計画していた場合です。
クリストファーキャシェル

オーバーヘッドを回避し、ブートプロセスを簡素化するために、ファイルではなくパーティションにスワップを設定することをお勧めします。ただし、ファイルを使用しても機能します。4ギガバイトは、すべての任意のシステム私はあなたが多くのRAMの16ギガバイトで、とにかくスワップれます疑う、必要があるのである
Silverfire

実際にアンドリュー・モートンによると、パフォーマンスがスワップファイルとパーティション間でほぼ同じである必要がありlkml.org/lkml/2005/6/29/11
ジャーニーマンオタク

8

非常に長い答えをおforびします。私はしばらくの間、このようなものをアクセス可能な場所に置きたいと思っていました!

TLDR; 理論的に言えば、答えは「おそらく、すべてのアプリケーションが使用したい常駐メモリの総量以上です」

あなたが私と一緒にいるなら説明しようと思います。

仮想メモリについて少し

最近、スワップの価値とその目的についてよくある誤解があると感じています。スワップは、メモリが不足している場合のメモリの「予備バンク」と見なされることがよくあります。はい、これは部分的には正しいですが、カーネルはスワップをリザーブバンクとして使用することを望みませ。さらに、カーネルはディスクを呼び出して、必要なデータを取得することを望みません。

アプリケーション空間では、カーネルがメモリに保持するものがいくつかあります。

  • マッピングされたファイルデータ。
  • tmpfsファイルシステム。
  • 実行時に割り当てられる未加工のアプリケーションメモリ。
  • アプリケーションコード(ELF形式のデータセグメントにあるものなど)
  • 非公開のファイルデータ。

メモリ管理の目的のために、メモリ割り当てがされている担保支持装置によって何らかの形または別の。

ファイルバックアップメモリは、ファイルから取得されたメモリであり、一般的なO / Sではシステム上のメモリ割り当ての大部分を占めています。ロードされた共有ライブラリなどのファイル、ディスクから読み取られてページキャッシュに格納されたファイル、およびディスクからmmapされたファイルが含まれます(実際、カーネルはページキャッシュ内のファイルとmmapされたファイルを本質的に区別しません同じこと)。

カーネルの観点から見たこのメモリの素晴らしい点は、その使い捨てです。つまり、他の何かのためにメモリが必要な場合、これらのページをダンプすることが可能であるべきであり、これはメモリが突然要件である場合にまさにページキャッシュが行うことです。

匿名でバックアップされたメモリは別の問題です。この領域からのメモリは匿名です。なぜなら、実際にはこのデータを含むファイルがディスク上にないからです。これは通常、アプリケーションスタック、ヒープ、tmpfs内のすべて、およびプライベートで変更された(マップされたデータをディスクに同期できないため)マッピングされたデータで構成されます。これらのページが変更された場合にそれらを書き戻すための有効なファイルがファイルシステム上に存在しないため、匿名でバックアップされたメモリはスワップメディアによってバックアップされます。

現在、カーネルは、メモリが不足している場合、ファイルでバックアップされたメモリを捨てるのがはるかに安価であり、匿名でマッピングされたメモリをはるかに安価であると認識しています料金には匿名で(この記事を参照してくださいファイルがメモリを担保し、これはswappinessの修飾子は、Linux上で何を実際よりも80倍以上の価値があるものとしてメモリを裏打ちされ、ここであなたはswappinessのパラメータが変更された内容を正確に把握したい場合)。

最悪のシナリオ

サーバーが制御不能になり、OOMが発生する最悪のシナリオは、メモリ割り当て要求を尊重するよりもI / O要求の処理に時間がかかりすぎるという事実に基づいています。この基準を呼び出すことができる2つの条件があります。

  • 匿名メモリを常にスワップして、要求に応じてページを取得するか、アプリケーションにさらにページを割り当てます。
  • CPU時間を必要とするプロセスの実行に与えるよりもメモリ内にないため、ディスクからデータをフェッチする時間がかかりすぎます。

最初の問題は、一般的に考えられている問題です。つまり、メモリの多くはスワップ内に存在するため、匿名メモリをRAMからスワップし、スワップに戻し、スワップから何かを取り出して実際のRAMに入れる必要があります。この操作は非常に高価であり、回復不能な状況になるまでマシンを遅くします(I / Oから提供できるものよりも多くの要素がページ要求のためにキューに入れられるため)。

2番目のものはあまり考慮されていませんが、同様に重要です。ほとんどすべてのメモリを実際のアプリケーションデータに割り当てると、長続きしません。ほぼすべてのアプリケーションは、ファイルシステムからのファイルの読み取りに依存して動作します。これは、一部の命令が共有ライブラリに存在するか、ライブラリ呼び出しまたはその他の目的で/etc/resolv.confを読み取る必要があるためです。オペレーティングシステムを停止することは完全に妥当です-ただし、すべてのアプリケーションに対応するのに十分なメモリがありますが、大量のI / O要求をキューに入れるため、適切に完了するチャンスはありません。

カーネルがスワップで何をしたいのか

カーネルは、スワップを使用してメモリを浪費しているページを取り除き、そのメモリを他の目的に使用できるようにします。

基本的に、通常の操作では、カーネルはディスクから読み取ったデータでページキャッシュを積極的にいっぱいにすることを好みます。これは、同じデータのディスクを読み取らないことを意味します。これは優れた設計であり、I / Oを大幅に削減できます。さて、3日間スリープし、ウェイクアップし、大量の作業を行ってからさらに3日間スリープするアプリケーションがメモリにある場合があります。

カーネルがこのデータを使用してやりたいことは、代わりにファイルシステムのアクティビティ用のスペースを作るためにスワップアウトすることです。これらのページは、アプリケーションで使用するページよりも実際に頻繁に使用される可能性が高いからです。この意味でのスワップは、スワップメディアへの16 kbのトランザクションであり、ほとんど感じることはありませんが、4つのファイルに相当するデータを保存するために使用できる 16 kbのメモリを解放しました。

カーネルがスワップを使用したくないもの

カーネルは間違いなく、スワップを使用して他の匿名メモリをスワップアウトすることで、より多くの匿名メモリを割り当てたくありません。これは、人々が最も心配する状況です。

ただし、カーネルがこれを行う以外に選択肢がないほど多くのメモリを割り当てた場合、これはカーネル自体ではなくシステム管理者の設定の問題であることに注意する必要があります-あなたが与えたオプション!

大量のスワップがある場合、それを使用する可能性は高くなりますか?

番号!1GのRAMと4Gのスワップがある場合、データがスワップされる可能性は80%ありません!カーネルは、メモリ内のページが他の何かをすることでより適切に提供できる場合にのみ、スワップを使用したいと考えています!

スワップをまったく使用しないほうが有利ですか

私はこれを決してしません。スワップにより、O / Sは必要なメモリを取り除くことができますが、使用されることはありません。スワップがない場合、メモリを飲み込むだけでは戻れません。そのため、たとえばページキャッシュにメモリを持たせることで、パフォーマンスが大幅に向上することがあります。

最適なスワップは何ですか

理論的には、ヒープからメモリを割り当てなければならない再入可能なライブラリ呼び出しなどの安全のために、常駐メモリの量+ 20%を見つけて、スワップをその量に設定します。これにより(理論的には)、オペレーティングシステムがより有用なものに道を譲る必要がある場合、すべての匿名メモリをスワップアウトできます。

カーネルの機会を利用して、危険なものすべてを交換することができたら?

カーネルは、ここでより多くの匿名メモリ割り当てのためにスワップすることを望んでいないことを忘れないでください。使用していないページをスワップアウトして、代わりにスペースをより有効に使用する何かを優先します。

より多くの匿名メモリから割り当てるためだけに非メモリをスワップアウトする場合、何か間違ったことをして、より多くのRAMを必要とするか、アプリケーションスタックを再調整するために。

どのくらいのRAMが必要ですか

もちろん、すべてのアプリケーションを実行するために十分なRAMを許可する必要がありますが、おそらくページキャッシュがいっぱいになるために、おそらく2Gの追加のRAMを許可する必要があります。ページキャッシュを使用すると、コンピューターがはるかに高速になり、ディスクの寿命が長くなります。Webサーバーを実行することを考えている場合、ページキャッシュのためにさらに多くの静的コンテンツを取得して再利用できるため、ページキャッシュのためにさらに多くのことをお勧めします(Webサーバーのスループットが5mb / sの場合、あなたは本当にいけません結局のところ、ディスクから生成した5mb / sのコンテンツを取得したいのです!)。

Linuxが適切にスワップすることを本当に信用していない場合の対処方法

本当に心配なら、あなたが持っているよりも多くのメモリを割り当てることができます:

  • スワップ量をRAM以上に設定しないでください
  • / proc / sys / vm / overcommit_memoryを2に設定します
  • / proc / sys / vm / overcommit_ratioを、物理RAMの制限を実際に超えることのない値に設定します。カーネルのドキュメントを参照してその数値がどうなるかを確認してください。

アプリケーションの記憶を調整する最良の方法は何ですか

  • swappinessが実際に行うことを理解します。
  • CGroupsを使用して、アプリケーションごとに正しいリソースを割り当てます。
  • 上記のオーバーコミットモードを変更して、オペレーティングシステムに厳しい制限を適用させます。
  • 上記のようにcgroupsを使用して、メモリ不足の場合に本当に保持したいアプリケーションとメモリ不足の場合に本当に捨てたいアプリケーションにOOM優先順位を設定します。

ベンダーは別の構成を推奨しています。

代わりにそれを聞いてください。一部のアプリケーションは、意図的にカーネルを呼び出して、他のすべてのアプリケーションよりもページをアクティブにするように作成されています。これは正直に言うと厄介なトリックですが、カーネルが発生したときにシームレスにメモリを管理する能力を損ないます。ベンダーがあなたに詳細を提供している場合、彼らはおそらくこのカテゴリーに分類され、代わりに彼らが言うことに耳を傾けます。

要約すれば

  • スワップは、無駄なメモリを置く場所として使用することを目的としています。「予備メモリ」としてではない
  • 大量のスワップを使用しても、それを使用する可能性には何の影響もありません。
  • カーネルは、データのためにディスクへのアクセスを停止することを本当に望んでいます。これは、スペースをスワップするのと同じように、ページキャッシュにも等しく適用されます。
  • カーネルは、実行中のアプリに設定を与えるために最善を尽くします。しかし、500人のApacheの子供がすべて32Mのメモリを占有している場合、OOMを行っても驚かないでください。これは、メモリ管理ではなく、選択した構成の障害です。

カーネルは通常、仮想メモリを適切に管理する非常に良い仕事をします。そのほとんどの場合、アプリケーションが、おそらく作業を期待できる以上のメモリを割り当てており、それがOOMの原因です。

スワップは「予備メモリ」として使用されていましたが、その主な目的ではなくなったため、そのように使用することを考えないでください。代わりに、カーネルがおそらくメモリの使用目的を最もよく知っていることを理解してください。これらの決定を行うためのスペースを確保すると、全体的なパフォーマンスの改善から利益を得ることができます。


2

ドキュメント「RedHat®EnterpriseLinux®5上のOracle 10g Server 5の導入に関する推奨事項」から。

Oracleは、MetaLink Note 169706.1でスワップのサイズに関する一般的な推奨事項を提供しています。これらの推奨事項により、大量のメモリを搭載したシステムで非常に大きなスワップ領域が作成される場合があります。スワップが非常に大きいと、システムのパフォーマンスが大幅に低下する可能性があり、スワップスペースを減らすことで解決できます。Red Hatは、Red Hat Enterprise Linux 5のスワップ用に4GBを超える容量を割り当てることを推奨していません。

したがって、16GBの場合、4GBを超えるスワップは必要ありません。

PS。また、oomI / O帯域幅全体を使用する使用不可のスワップアウトプロセスよりも、invokeの方がほぼ常に優れていることに注意してください。



-1

私がLinuxのドキュメントから思い出したことから:あなたのRAMが2ギガバイトよりも大きい場合、あなたはスワップ=(ramSize + 2)を行います。少ない場合は、swap =(ramSize * 2)を実行します


-2

私はこのドキュメントを見つけました。それはあなたがその決定を下すのに役立つはずです、ここにあります: スワップスペースとは?、しかし上記の答えはどちらも正しい


1
リンクしたドキュメントは、それ自体に同意しません。「2Gbを超えるRAMの2Gb RAMの量」という規定のルールに従うと、5Gbではなく3Gb RAM(3-2 = 1)の1Gbスワップが得られます。
デビッドスピレット2009
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.