[PHP-users 28802] Re: CPU 負荷にあわせて mod_deflate のオン / オフ切り替えはできないか?

haward99@yahoo.co.jp haward99 @ yahoo.co.jp
2006年 3月 24日 (金) 12:15:49 JST


わたなべです。
#ついでなのでphp-usersにもCC

なるほど。no-gzip環境変数ですか。
ちょっといろいろ見てみたら、
PHPのマニュアルのユーザーコメント欄にもこんなことが載ってました。

If you are using mod_gzip or mod_deflate to compress HTML output, 
you're not able to send partial file to the browser....
To disable mod_deflate in PHP (if needed), you can tell Apache with this :
apache_setenv('no-gzip', '1');
(http://jp.php.net/manual/ja/function.apache-setenv.php より)

アプリケーションレベルでも実現できそうですね。


--- Hiroyuki OYAMA <oyama @ module.jp> からのメッセージ:
> ** Apache ユーザーズメーリングリスト **
> ** 注意:このメールへの返信は Apache-Users へ行きます **
> 
> 小山浩之です。
> # 久しぶりだなぁ...
> 
> On 2006/03/08, at 11:59, <haward99 @ yahoo.co.jp>  
> <haward99 @ yahoo.co.jp> wrote:
> > Yahooでは、apache1.3+mod_gzipという環境で、
> > CPUのアイドルが10%を切るとmod_gzipがオフになるという
> > 仕組みを導入してるらしいです。↓
> > http://public.yahoo.com/~radwin/talks/yapache-apachecon2005.htm
> >
> > 自分の環境はapache2+mod_deflateなのですが、
> > 同様のことを実現できる簡易な方法ってないでしょうか?
> 
> Yahooでこれを実現するためにどう実装しているかは置いといて、簡単 
> な方法を一つ。
> 
> 特定条件でApache内部の環境変数
>    no-gzip
> をセットすれば、mod_deflateによる圧縮処理はスキップされま 
> す。つまり条件に応じて上記の環境変数をセットするモジュールを用意 
> して組み込むだけで実現できます。
> 
> 
> 参考までに/tmp/no-gzipファイルが存在するときだけ圧縮処理を 
> スキップさせるモジュールは、下記のように簡単に記述することができ 
> ます。
> 
> ------------------------------------------------
> #include "httpd.h"
> #include "http_config.h"
> #include "http_protocol.h"
> #include "ap_config.h"
> 
> static int mysetenvif_handler(request_rec *r)
> {
>      apr_finfo_t finfo;
>      apr_status_t rv;
> 
>      rv = apr_stat(&finfo, "/tmp/no-gzip", APR_FINFO_SIZE, r->pool);
>      if (rv == APR_SUCCESS)
>          apr_table_set(r->subprocess_env, "no-gzip", "yes");
>      return OK;
> }
> 
> static void mysetenvif_register_hooks(apr_pool_t *p)
> {
>      ap_hook_fixups(mysetenvif_handler, NULL, NULL, APR_HOOK_MIDDLE);
> }
> 
> /* Dispatch list for API hooks */
> module AP_MODULE_DECLARE_DATA mysetenvif_module = {
>      STANDARD20_MODULE_STUFF,
>      NULL,                  /* create per-dir    config structures */
>      NULL,                  /* merge  per-dir    config structures */
>      NULL,                  /* create per-server config structures */
>      NULL,                  /* merge  per-server config structures */
>      NULL,                  /* table of config file commands       */
>      mysetenvif_register_hooks  /* register hooks                  */
> };
> ------------------------------------------------
> 
> 
> CPUの使用率とかを参照するAPIはOSによってまちまちだっ 
> たと思うので、ご利用の環境で何を使えば良いのかを調べてみてくださ 
> い。もしくは getloadavg(3) あたりでロードアベレージを元に 
> 動作を変えるというのも簡単で良いかもしれません。
> 
> SEE ALSO
> http://httpd.apache.org/docs/2.2/en/mod/mod_deflate.html
> 
> ___
> Hiroyuki OYAMA <oyama @ module.jp>
> http://module.jp/
> 



PHP-users メーリングリストの案内