web-dev-qa-db-ja.com

PHP-共有ホスティング用のFPMとAPC?

アカウント/サイトごとに1つのキャッシュのみを作成するようにAPCを取得する方法を検討しています。これはFastcgi(最終更新2006…)で実行できますが、Fastcgid APCでは、同じアカウントで実行される複数のプロセスに対して複数のキャッシュを作成する必要があります。

この問題を回避するために、PHP-FPMを調査してきました。

PHPプロセスマネージャーでは、複数のPHPプロセスが単一のAPCキャッシュを共有できます。

しかし、私が読んだことから(私が間違っているといいのですが)、プロセスごとにプールを作成しても、すべてのプールにまたがるすべてのサイトが同じAPCキャッシュを共有します。これにより、共有Memcachedの場合と同じ問題に戻ります。安全ではありません。

Php-fpmのサイトで、php-fpmプールをchrootして、プールごとに特定のUIDとGIDを定義できることを読みました…この場合、APCはこのユーザーを使用する必要はなく、他のプールキャッシュにアクセスする必要はありませんか?

ここの記事(2011年)は、プールごとに1つのプロセスを実行して、構成ファイルごとに1つのプールを持つ異なるポートと異なる構成ファイルで複数のランチャーを作成する必要があることを示唆しています。

http://groups.drupal.org/node/198168

これはまだ必要ですか?

もしそうなら、php-fpmの800プロセスを実行するとどのような影響がありますか?それは主に記憶でしょうか?もしそうなら、どのように私はメモリの影響がどうなるかを理解することができますか?

Php-fpmを800回実行してから、アカウントで1つのサイトに複数のAPCキャッシュを作成する方がよいと思いますか?

アカウントが平均して50MBのキャッシュを作成し、アカウントごとに3つのキャッシュを作成すると、アカウントごとに150Mbになり、120GBになります…

ただし、各アカウントが平均して50Mbしか使用しない場合、40GBになります

次のサーバーには少なくとも128GBのRAMがあるので、800 x PHP-FPMを実行しても20GBを超えるオーバーヘッドが発生しない場合は、40GBでもかまいません。

PHP-FPMは、適切な量のメモリを備えたサーバーで共有ホスティングに安全なAPCキャッシュを提供するための最良の方法だと思いますか?

それとも私は別のシステムを見るべきですか?

ありがとう!

4
Tiffany Walker

それは私が主導しているプロジェクトの一部なので、あなたが何をしようとしているのか知っています。私はすでにそれについて調査しましたが、問題を解決する唯一の方法は、memcachedとapcの修正バージョンを使用することだと思われます。

現在、APCではデータをmemcachedに保存できると思っていましたが、そうではないことがわかりました。そのため、問題を解決する最も簡単な方法は、memcachedをハッキングして、異なるキャッシュ、異なるキャッシュサイズ、および次に、APCもハッキングして、memcachedにクエリを実行してオペコードをフェッチできるようにします。

Memcachedハックは、キャッシュに有効期限を設定し、キャッシュする必要があるものとしないものを評価できるため、便利です。これにより、RAMを節約し、オンデマンドでのみ使用できます。使用するアカウントを選択するには、memcachedサーバーに対してSASL認証(memcached用に既に開発されている)を使用して、この構成のセキュリティを強化します。

Memcachedデプロイは、キャッシュなどの他の用途にも役立つため、このパスをたどります。

0

ここでFastCGIを使用しても問題はありません。説明します。APCは、ヒットの頻度が高いサイトには必要であり、たまにヒットするサイトにはまったく必要ありません。

したがって、メモリ効率に関しては、サーバー上にいくつかのサイトがあり、人気のあるサイトとそうでないサイトがあります。各サイトにFastCGIプロセスのプールがあり、PHPはそのワーカーを管理します(PHP_FCGI_CHILDREN変数でFastCGIシェルラッパーを使用)。各FastCGIプールには有効期間があり、APCキャッシュはすべてのPHPプールのプロセス。

人気のあるサイトは頻繁にヒットし、FastCGIプールは死ぬことはなく、APCはメモリに残ります。つまり、すべてのPHPワーカーに対して50MBのキャッシュ)です。

それほど人気のないサイトはFastCGIキルポリシーをトリガーし、ワーカーはAPCキャッシュ解放メモリで完全にシャットダウンされます。このサイトがヒットすると、プールが再開され、最初のヒットが遅くなります。このモデルは、PHP-CGIモードと、メモリ消費量が少なく、リソース使用量が多いPHP-FPMプロセスと、ホットで準備ができたキャッシュを備えたプロセスのプールを効果的に組み合わせています。

PHP-FPMモデルでは、サイトごとに少なくとも1つのワーカーを保持する必要があるため、メモリを大量に消費します。

ps。 php-fpmのオンデマンドパッチがありますが、本番環境ではまだテストされていません。

2

あなたの投稿が、APCオペコードキャッシュがいくつかのchrootされたインスタンス間でいくつかの構成ファイルを混合していたバグを見つけるのに役立ったことを付け加えておきます。したがって、個別のphp-fpmデーモンを持つchrootされたプールを使用する必要がある場合は、chrootされたパスがプール間で折りたたまれる可能性のある複数のプールを使用しないでください。

1
regilero