web-dev-qa-db-ja.com

ウェブサーバーにどれだけの空きメモリが必要ですか?

現在、2つのWordpressサイトといくつかのJavaベースのコラボレーションソフトウェアをホストしているWebサーバーがあります。サーバーには2Gのメモリがあり、現在約1.8Gの使用可能なメモリを使用しています。トラフィックがほとんどないパイロットプロジェクトなので、メモリがさらに必要になることは明らかです。

解放するとしたら、取得するトラフィックに基づいてメモリの必要量をどのように予測できるのかと思っていました。私はグーグルでぶらぶらして、私が見つけたものは少し微妙です。サーバーのベース(トラフィックなし)負荷の関数としてメモリ要求を計算するときに使用する優れたヒューリスティックはありますか?

参考までに、free -mの出力を以下に示します。

             total       used       free     shared    buffers     cached
Mem:          2048       1832        215          0          0          0
-/+ buffers/cache:       1832        215
Swap:            0          0          0

私には、これは実際に使用されているメモリのように見え、キャッシュやその他の理由による幻想ではありません。

私のコラボレーションソフトウェアの要求は実験的にテストする必要があると考えているので、そのソフトウェアを実行せずにfree -mを次に示します。

             total       used       free     shared    buffers     cached                                     
Mem:          2048       1109        938          0          0          0                                     
-/+ buffers/cache:       1109        938                                                                      
Swap:            0          0          0   

これを理解するための私の計画Bは、サーバーに大量のスワップ領域を追加し、それにトラフィックを与えて、スワップが使用される量に応じて調整することです。誰かが事前にどのくらいのメモリを計画する必要があるかを推定する良い経験則があるのか​​、それとも私が考えているのは真実なのか疑問に思っていました。

事前に感謝します(私は本当にこれに非常に新しいです)。

5
neanderslob

答えは基本的には次のとおりです。あなたの特定のケースでは、あなたがインストールしたサイトの品質と効率が問題になるかもしれません。

たとえば、今週私は比較的中程度のトラフィックでありながら4GBのRAMを消費するサーバーに取り組んでいました。コードレビューを行った後、サイト全体でWordPressと同様の既製のCMSを使用していますが、カスタマイズが行われています)で、大きなボトルネックが見つかりました。問題を記録し直すと、サーバーが約2GBのRAM=平均的な日を使用します。RAM使用量が50%減少します!

NgnixとApacheを使用するようにサーバーを分割するようなことはお勧めしません。 Apacheを使用するだけです。 2つの異なるサーバーの構成のバランスをとるという頭痛の種は、限界的な利益に値しません。 Apacheは結構です。しかし、そうは言っても、同じボックスでWordPress PHPサイトとJavaアプリとMySQLを比較することで検討する必要があります。私の経験では、次のことを行う必要があります。

  1. Apacheを適切に設定します:Apacheは優れたソフトウェアですが、箱から出してすぐにメモリを消費します。たとえば、デフォルトでは1秒あたり255の接続が許可されていると思いますか?ほとんどの単純なサイトでは、良い日に1秒あたり40接続しか得られません。したがって、トラフィックに現実的になるようにApacheを調整すると役立ちます。また、ApacheにはKeepAlive設定があります。しかし、箱から出して、それは100のMaxKeepAliveRequestsに設定されていると信じています。私は通常、これを約30接続に設定し、KeepAliveTimeoutを2〜3秒と小さく設定します。重要なのは、平均的なページをダウンロードするのにかかる速度に合わせてKeepAliveTimeoutを設定し、オーバーヘッド/低速のわずかな余裕を持たせることです。したがって、ページが1秒で読み込まれる場合は、2秒のKeepAliveTimeoutを実行します。
  2. WordPressサイトに潜在的なボトルネックがないか確認します:PHP =その中核&できることを明確にします。過剰なMySQL呼び出しとファイルシステム呼び出しに注意してください。ここで、アプリを飛ばすことができます!また、memory_limitあなたのphp.ini必要以上に高くないことを確認してください。デフォルトは64Mですが、多くの場合、32Mに下げることができます。
  3. MySQLのチューニングまたは独自のサーバーへの移動:上記のMySQLについて記述した後、同じボックスでMySQLインスタンスをホストしている可能性があることに気付きました。 MySQLチューニングプライマー のようなスクリプトを実行して、MySQLパフォーマンスの最適化を検討します。 MySQLはチューニングを行わないと、すべてのリソースが消費され、システムがダウンします。 MySQLはチューニングにより、より速く/より速く実行され、他の目的のためにリソースを解放できます。また、MySQL DBをスタンドアロンサーバーに移動することも検討してください。サーバーへのアクセスを許可し、ハッカーから保護するためにサーバーを適切にネットワーク化およびファイアウォール化する方法を学ぶ必要があるかもしれませんが、パフォーマンスの利点は大きくなります。
  4. Javaアプリを別のサーバーに移動することを検討してください:私の経験則は1つのメジャーですJavaアプリケーション/サーバー。一般的に、Javaアプリは、PHP WordPressのような設定と比較すると、メモリを大量に消費する可能性があります。Javaアプリは、使用する独自のサーバーです。WordPressサイトのほうがはるかに便利です。

MySQLのチューニングに関しては、それは最初に数週間かかる場合があります。スクリプトを調整する理由は、MySQLが見る実際のトラフィックに基づいています。つまり、基本的にはサイトを世界に向けて公開し、少なくとも2日待ってからチューニングスクリプトを実行し、さらに数日待ってさらにチューニングを行います。 1週間ほど経つと、MySQLを調整して、セットアップと同じように機能させることができるはずです。

17
JakeGould