
通常apache 2.0はプロセスをpreforkするモードで動作します。
リクエストが来ると、事前にforkされていたプロセスへ処理を引き渡すという仕組みです。
しかし、プロセスよりもスレッドで処理する方が、リソースの使用効率が良くなります。
apacheにもスレッドでリクエストを処理する方法がありますが、モジュールをスレッドに
対応させる必要があるので、あまり広く使われていないようです。
FC6で試してみましたが、私の環境ではphpをスレッド対応に作りなおす必要がありました。
続きは本文に FC6のapacheは、/etc/sysconfig/httpdに以下の設定をしてやるだけで、スレッドによる処理をするようになります。
HTTPD=/usr/sbin/httpd.worker
しかし、phpはスレッドによる処理の引渡に対応していないので、phpに対応したページを表示しようとすると、エラーになります。(画面には表示されず、error.logに記録されます)
phpを作りなおすには、RPMを作りなおす方法と、手で/usr/local等にインストールする方法がありますが、
私は後のメンテを考えて、RPMを作りなおしています。
- phpのSRPMパッケージを入手
- SRPMパッケージを展開
- php.spec中のconfigureオプションの下部に、以下の2行を追加
--with-tsm-pthreads \
--enable-maintainer-zts \
- rpmbuildコマンドでspecファイルからrpmを作る
- できたrpmを上書きインストールする
これでスレッド対応のapacheでもphpがうまく表示されるようになります。
コメントは投稿者の責任においてなされるものであり、サイト管理者は責任を負いません。