Apacheではホームページ用WebサーバとAndroidバイナリアプリにHTTPSでデータを送るためのWebサーバを兼ねています。
最近Apacheのserver-statusいわく、独自Androidバイナリアプリからの一部アクセスが増えてきてサーバ負荷が上がっていることがわかりました。
Androidバイナリアプリに送っているのは、HTMLではなくアプリの動作に関する独自記述で一回通信したら終わりです。
そこで該当通信箇所のKeepAliveはOffにして、PHPからの結果出力後、直ぐにApacheプロセスを閉じるようにすれば、AndroidバイナリアプリによるApacheリソースが低下し、サーバ負荷が下がるのではないか?と考えています。
方法についてご存じの方よろしくお願いします。
HTTPヘッダに下記を送信することでKeep-Aliveは打ち消せます。
header("Connection: close");
http://www.cresc.co.jp/tech/java/Servlet_Tutorial/Lesson_36.htm
できないと思います。
根拠は、keepalive ディレクティブのコンテキストが「サーバ設定ファイル, バーチャルホスト」となっているからです。
http://www.apache.jp/manual/mod/core.html#keepalive
keepalive関連のコンテキストは全て「サーバ設定ファイル, バーチャルホスト」となっています。
ということは、バーチャルホストなら他のホストと異なる設定ができるということです。なので、問題のPHPをまるごと別のバーチャルホストに移設してサービスしたら良いと思います。
たとえば・・・
通常:www.exsample.com
PHP用:cgi.exsample.com
として、同じサーバで、ホストを分ければできるということになります。
こうしたら上手くいくかもしれません。
まずApacheにバーチャルドメインを作り、そこに問題のPHPだけを移し、そこにプロキシするようにmod_rewiteの設定をします。
RewriteEngine on
RewriteRule ^/php/(.*)$ http://cgi.exsample.com/$1 [P,L]
これで、www.exsample.com/php/xxxxx.php にアクセスすると内部的にcgi.exsample.com/xxxxx.php にアクセスしたようになります。cgi.exsample.com側は設定でKeepAlive offにしておけば良いと思います。
パパトモさんありがとうございます。参考にさせて頂きます。
前の方も答えているように、
KeepAliveなどはサーバ全体の設定になるためできないようです。
MaxKeepAliveRequestsで頑張っても、
AndroidからのリクエストでWebサーバ側の接続が切れても駄目ですよね。。
windowsでなければapache_child_terminate()が使えそうですが。。
ソフト側で処理をできるだけ軽くし、
MaxClientなどでできるだけ処理する設定をするのがよいのではと思います。
sasasasaisai さんありがとうございます。
PHPソースを調べていたところSQLのSELECT *を使っているところを見つけましたので、こういったところが他にないか調べて、軽くしてみたいと思います。
apache_child_terminate()も今回は使えないですが、参考にさせて頂きます。
HTTPヘッダに下記を送信することでKeep-Aliveは打ち消せます。
header("Connection: close");
http://www.cresc.co.jp/tech/java/Servlet_Tutorial/Lesson_36.htm
oil999さんありがとうございます
headerはlocationしか使ったこと無いので、興味深いです。試してみます。
keepaliveのチューニング
http://www.atmarkit.co.jp/flinux/rensai/apache16/apache16b.html
http://tech.bayashi.net/svr/doc/apache/tune.html
pigmon88さん、返答有難う御座います。
しかしながら質問文読みましたか?
oil999さんありがとうございます
2012/11/07 14:33:15headerはlocationしか使ったこと無いので、興味深いです。試してみます。