fastcgiに関するいくつかの抜粋


元の討論スレッド:http://www.iteye.com/topic/267429
 
dangoのfastcgiパターンには以下のような重要なパラメータがあります。
# protocol=PROTOCOL    fcgi, scgi, ajp, ... (default fcgi)   
#  host=HOSTNAME        hostname to listen on..   
#  port=PORTNUM         port to listen on.   
#  socket=FILE          UNIX socket to listen on.   
#  method=IMPL          prefork or threaded (default prefork)   
#  maxrequests=NUMBER   number of requests a child handles before it is    
#                       killed and a new child is forked (0 = no limit).   
#  maxspare=NUMBER      max number of spare processes / threads   
#  minspare=NUMBER      min number of spare processes / threads.   
#  maxchildren=NUMBER   hard limit number of processes / threads   
#  daemonize=BOOL       whether to detach from terminal.   
#  pidfile=FILE         write the spawned process-id to this file.   
#  workdir=DIRECTORY    change to this directory when daemonizing.   
#  outlog=FILE          write stdout to this file.   
#  errlog=FILE          write stderr to this file.   
#  umask=UMASK          umask to use when daemonizing (default 022). 
 
 protocol=PROTOCOL    fcgi, scgi, ajp, ... (default fcgi)
  host=HOSTNAME        hostname to listen on..
  port=PORTNUM         port to listen on.
  socket=FILE          UNIX socket to listen on.
  method=IMPL          prefork or threaded (default prefork)
  maxrequests=NUMBER   number of requests a child handles before it is 
                       killed and a new child is forked (0 = no limit).
  maxspare=NUMBER      max number of spare processes / threads
  minspare=NUMBER      min number of spare processes / threads.
  maxchildren=NUMBER   hard limit number of processes / threads
  daemonize=BOOL       whether to detach from terminal.
  pidfile=FILE         write the spawned process-id to this file.
  workdir=DIRECTORY    change to this directory when daemonizing.
  outlog=FILE          write stdout to this file.
  errlog=FILE          write stderr to this file.
  umask=UMASK          umask to use when daemonizing (default 022).
多くのパラメータはtomcatと同じです。主にhost、port、socketについて説明します。hostとportはペアで出るべきだと知っています。socketは何ですか?実はみんなsocketです。でも、host+portモードはtcp sockです。そして、socketはunix sockです。彼らは全部ソケットです。一つはローカルオペレーティングシステムです。一つはネットソケットです。
 
 
 
djangoでは、lighttpdはfcgiプロセスの発生または消滅を制御することができません。これらの仕事は全部flupです。python manager.py funfcgiという命令で父プロセスを生成します。そして、要求によって父プロセスから動的なspawn子プロセスを作ります。最大のアイドルプロセス数は50で、最小のアイドルプロセス数も50である。これで親プロセスは絶えず破壊し、子プロセスを作成することができなくなる。このように実は同じく動的なspawnを免れましたと言えます。
 
 
 
プロセスには軽い量と軽い量の違いはありません。あなたがforkする時はお金がかかります。親子プロセス共有データというのはただのcopy-on-writeにすぎません。これは物理メモリを節約できるだけで、他の利点は大きくありません。mod_私はこのようなやり方をしていますが、このような欠点は前に述べました。私の観察によると、FastCGIプロセスのメモリオーバヘッドの一番の部分はまだメモリスタックで、ややもすれば100-200 MBで、さらに多く、あなたのcopy-on-write節約の共有コードセグメントメモリは非常に限られています。10-20 MBのようです。
 
ライト級プロセスは親子が常にカーネル中のデータ構造を共有することができます。これらのデータ構造が占める空間は限られています。10-20 mはないはずです。だから一つはcowプロセスです。親子プロセスは同じ物理ページを読みます。これらのfastcgiプロセスの物理ページは10 mぐらいです。
 
 
 
 
1、ダイナミックspawnプロセスの欠陥は、ウォーカープロセスが死ぬまで耐えられないことではなく、ハッカーが大量の要求を瞬間的に開始してクリーンなCPUリソースを消費し、サーバに応答を失わせ、重大なものはリモートsshに上がることができないことである。ある程度のspareプロセスがあるかもしれませんが、これはハッカーの大量要求の前では効果がありません。静的なspawnの利点は、このような状況に遭遇すると、最も多くのサイトの動的要求に応答できなくなります。他のすべての場合、lighttpdの同時接続状況を確認する十分な時間があります。実はlistpeedもlsapiを通してRubyプロセスのダイナミックspawnをサポートすることができますが、私がテストした結果、上記の問題があります。もちろんApacheのmod_ライズにも上記の問題があります。特にラーズアプリケーションのように、初期化のプロセスが非常に長いです。初期化のためにロードされたデータが多く、起動時にCPU消費が非常に大きいです。2、ダイナミックspawnは要求数を超えたら自動的に廃棄してしまうので、意味がないと思います。このような自動再起動メカニズムはメモリ漏れによる苦痛をある程度軽減できますが、もし私のプロセスにメモリ漏れがなかったら、ちゃんと走ってください。なぜ定期的にリセットしなければならないですか?だから、このような計数のメカニズムによって定期的に再起動してもいいです。資源の監視状況によって釈放を決めます。もしあなたのプロセスのメモリがある程度漏れたら、私はあなたをやり直します。もし漏れないなら、私は自然にあなたを重ならないです。このような仕組みはもっと合理的です。