web-dev-qa-db-ja.com

PHPアプリケーションは、RAMドライブから提供されることでメリットがありますか?

私は、大きくて遅いが拡張が容易なPHPアプリケーションのホスティングを担当しています。アプリケーションは完全に静的であり、書き込み可能なディスクストレージが必要です。アプリケーションのプロファイルを作成しましたが、主なボトルネックは、アプリケーションが実行する作業ではなく、アプリケーションのロードに起因しているようです。このアプリケーションは、かなりの量のメモリを使用しますが、CPUを集中的に使用しません(Magentoを考えてください)。

現在、ハードドライブに同じPHPファイルがあり、その前にロードバランサーがある一連のサーバーを使用して配布しています。簡単ですが高価です。

私は RAMディスク とそれらが提供するIOの利点について読んでいて、それらがPHPアプリケーションに適しているかどうか疑問に思っていました。

PHPアプリケーションはリクエストごとにディスクから読み込まれ、多くの場合、(Javaアプリケーションのようにメモリに保持されるのとは対照的に)多くの異なるファイルが含まれるため、ディスクのパフォーマンスがわかります。深刻なボトルネックになる可能性があります。

PHPファイルをRAMディスクに配置し、マウントポイントをApacheのドキュメントルートとして使用すると、パフォーマンスが向上しますか?起動スクリプトは、RAMドライブを作成してから、ファイル(プレーンテキストで小さい)を永続的な場所から一時的なRAMドライブにコピーできます。

これは理にかなっていますか、それともLinuxカーネルを信頼して適切なファイルをメモリにキャッシュする必要がありますか?

2
Tom Marthenal

いいえ、RAMディスクは実際にはPHP(PHPアクセラレータなどのより良いソリューションと組み合わせると)を傷つけます。

PHPパフォーマンスを向上させる最善の方法は、PHPアクセラレータを使用することです。これらはWebエンジン(Apache httpdなど)にプラグインしてキャッシュするモジュールです。 PHPスクリプトのコンパイル済みバイトコード。このキャッシュはramに保存されます。その結果、PHPスクリプトへの今後の呼び出しはディスクにまったく移動しません。 、プリコンパイルされたバイトコードはキャッシュから取得されます。つまり、ramdiskを使用しても何も得られず、代わりに他の場所で使用できるramを消費することになります。

ディストリビューションと使用しているWebサーバーエンジンによっては、すでにPHPアクセラレーターが実行されている可能性があります。

これは、このテーマに関する2つの優れたウィキペディアの記事です。
PHPアクセラレータ
PHPアクセラレータ のリスト

7
Patrick

十分なRAMを搭載したマシンがあれば、OSディスクキャッシュは適切なコンテンツをキャッシュするのにも同じように機能すると思いがちです(ファイルをキャッシュしないため、良くない場合は使用されていません使用されていますが、実際にディスクに過度にヒットしていることを確認した後、テストサーバーでベンチマークする必要があります(sarを使用)。

4
womble

PHPの最大の問題は、すべてのリクエストに対して、通訳者がしなければならないことです。

  1. ファイルシステムからファイルをフェッチします
  2. それを読んで
  3. それを実行可能形式に翻訳する
  4. 実行する

[〜#〜] apc [〜#〜] を使用すると、すべてのステップをスキップして、すぐに実行にジャンプできます。パフォーマンスの問題がある場合、特に言及したプロファイリングの結果を確認した後は、APCをインストールして構成してください。あなたはあなたが得るどんなパフォーマンスの向上にも驚かれることでしょう。

Howtopedia 組織向けに多数のWikiを最適化するという問題に直面しました。プレスリリースの後、彼らが得る新聞報道は体系的にシステム負荷を100%にしました。わずか25MBのキャッシュでAPCを構成すると、システム負荷が5%未満になりました。 1%未満へのいくつかのさらなる基本的な調整。

同時に、手順1〜3のほとんどは遅延を導入するため、ユーザーが経験する応答時間は劇的に改善されました。

あなたが説明するシナリオのためのいくつかのさらなるヒント:

  • aPCに25MB以上のキャッシュセグメントを割り当てます(OSがこのサイズのSHMセグメントを許可していることを確認してください)。 APCが使用するキャッシュ置換ポリシーにより、最も要求されたコンテンツがキャッシュに確実に格納されるため、ヒット率が95%を超える可能性があります。割り当てられたメモリを増やすと、指数関数的にそれほど重要なメリットは得られません。
  • あなたが言及するほとんど静的なアプリケーションで、apc.statを無効にしてさらにパフォーマンスを上げます。これにより、APCはPHPファイルをキャッシュ内で直接検索できます。最後の実行以降にファイルシステムが変更されたかどうかをサニティチェックする必要はありません。各リクエストは完全にメモリから処理され、ファイルシステムは決して処理されません。到達し、劇的なパフォーマンスをもたらしました。
  • aPCを実行した後、パフォーマンスのボトルネックがアプリケーション内に移動する可能性があります。特に、データベースとファイルシステムのどちらかを使用する場合。 Memcached は、アプリケーションコードに比較的小さな変更を加えた場合に対処するのに役立ちます。
2
michele

いいえ、RAMがすでにボトルネックになっている場合はそうではありません。

0
hakre