3

以下の2つのコマンドの違いは何ですか?

コマンド: manage.py runfcgi method=threaded host=127.0.0.1 port=3033

labs@li68:/var/www/django_projects/myproject$ ps aux|grep manage.py
labs   14558  0.0  2.2  65948  8212 ?        Sl   Oct19   0:09 python /var/www/django_projects/myproject/manage.py runfcgi method=threaded host=127.0.0.1 port=3033

コマンド: python manage.py runfcgi host=127.0.0.1 port=7021 protocol=fcgi pidfile=/tmp/myproject.fcgi.pid

labs@li68:/var/www/django_projects/myproject$ ps aux|grep manage.py
labs   21082  0.0  2.8  15440 10472 ?        S    22:27   0:00 python manage.py runfcgi host=127.0.0.1 port=3034 protocol=fcgi pidfile=/tmp/myproject.fcgi.pid
labs   21083  0.0  2.7  15440 10084 ?        S    22:27   0:00 python manage.py runfcgi host=127.0.0.1 port=3034 protocol=fcgi pidfile=/tmp/myproject.fcgi.pid
labs   21084  0.0  2.7  15440 10084 ?        S    22:27   0:00 python manage.py runfcgi host=127.0.0.1 port=3034 protocol=fcgi pidfile=/tmp/myproject.fcgi.pid
labs   21085  0.0  2.7  15440 10084 ?        S    22:27   0:00 python manage.py runfcgi host=127.0.0.1 port=3034 protocol=fcgi pidfile=/tmp/myproject.fcgi.pid
labs   21086  0.0  2.7  15440 10084 ?        S    22:27   0:00 python manage.py runfcgi host=127.0.0.1 port=3034 protocol=fcgi pidfile=/tmp/myproject.fcgi.pid
labs   21087  0.0  2.7  15440 10084 ?        S    22:27   0:00 python manage.py runfcgi host=127.0.0.1 port=3034 protocol=fcgi pidfile=/tmp/myproject.fcgi.pid

2 番目のコマンドは、6 つのプロセスを生成し、それぞれにメモリが割り当てられているように見えます。

  • 多くのメモリがない場合、最適なオプションは何ですか? いくつかのdjangoインスタンスを実行していますか?
  • 2 番目のコマンドで 6 つのプロセスが生成されるのはなぜですか?
  • 各アプローチの利点/欠点は何ですか?
  • 生成されるプロセスの量をどのように制限しますか?
4

1 に答える 1

6

複数のプロセスが表示される理由runfcgimethod=prefork、デフォルトでを使用するためです。この方法では、要求を処理するために一連のFCGIプロセスがフォークされます。明らかにmethod=threaded、代わりにマルチスレッドFCGIプロセスを使用します。

それぞれに長所と短所があります。プロセスはスレッドよりも多くのメモリを使用するため、preforkメソッドはより多くのメモリを使用します。また、フォークは新しいスレッドを作成するよりも時間がかかるため、起動に少し時間がかかります。ただし、通常、プリフォークはスレッド化よりも負荷を処理するため、アプリの負荷が高い場合は、プリフォークを使用した方がパフォーマンスが向上する可能性があります(そうでない場合は、どちらの方法でも大きな違いに気付かない可能性があります)。

2番目のコマンドが6つのプロセスを生成するのはなぜですか?生成されるプロセスの量をどのように制限しますか?

スポーンするプロセスの数を指定しない場合、Djangoはプリフォーク時にデフォルトの数のプロセスをスポーンします。maxspareまたはmaxchildrenオプションでこれを変更できます。

于 2010-12-03T21:13:23.303 に答える