web-dev-qa-db-ja.com

Apache MPM-ワーカーvsプリフォーク

私は自分のVPSにインストールできるApache MPMがどれであるかを理解しようとしています。私はいくつかのベンチマークを見て、MPM WorkerはPreforkよりもパフォーマンスが良いようですが、何らかの理由でPHPのセットアップではWorkerよりもPreforkを推奨しています。

これは、一部のPHP関数がスレッドセーフではないためですか?setlocale()のみが頭に浮かびますが、すべてのインスタンスで同じロケールを使用するので、私のVPSにはメモリがほとんどなく、ワーカーMPMが私のニーズにより適していると思いますが、確信が持てません。

誰かがこれについて私の決心をするのを手伝ってくれる?ありがとう!


PS: nginxとlighttpdも調べました。 nginxは素晴らしいようですが、ソースからのコンパイルを回避しようとしていますが、php-fpmの目的がよくわかりません。 lighttpdについて-PHP/FCGIを設定するのは信じられないほど簡単でしたが、メモリリークがあると聞きました。これはまだ本当ですか?

13
Alix Axel

Apache + mod_phpを使用する場合は、preforkを使用する必要があります。 FAQはその理由を明確に概説しています:

http://www.php.net/manual/en/faq.installation.php#faq.installation.Apache2

本番環境でApache 2をスレッド化されたMPMと一緒に使用しないのはなぜですか?

PHPは接着剤です。これは、数十のサードパーティライブラリをまとめ、直感的で習得しやすい言語インターフェイスを通じて1つにまとまったエンティティとして表示することで、クールなWebアプリケーションを構築するために使用される接着剤です。 PHP=の柔軟性と能力は、基盤となるプラットフォームの安定性と堅牢性に依存しています。連携するには、動作するOS、動作するWebサーバー、および動作するサードパーティのライブラリが必要です。これらのいずれかが動作を停止するPHPは、問題を特定して迅速に修正する方法が必要です。完全に独立した実行スレッドを持たないことにより、基盤となるフレームワークをより複雑にする場合、リクエストごとにメモリセグメントと強力なサンドボックスを完全に分離しますプレイするために、PHPのシステムにさらに弱点が導入されています。

nginx + php-fpmは、phpアプリケーションを実行するための優れた方法でもあります。 nginxはFastCGIをネイティブでサポートしており、php-fpmはFastCGI環境でphpを実行する最良の方法の1つです。こちらのphpドキュメントをご覧ください:

http://www.php.net/manual/en/install.fpm.php

12
dialt0ne