Uwsgiでflaskアプリを実行します。スーパーバイザーを使用してuwsgiプロセスを管理します。
サーバーソケットのリッスンバックログは100接続に制限されています。
100接続の制限を克服する方法は?私の実行中のスクリプトは次のとおりです。
[program:myapp]
command=uwsgi --master -s /tmp/app.sock --module myapp:app --processes 2 -H /srv/sites/mysite chmod-socket 666 --enable-threads
100の接続の「リッスンバックログ」は、サーバーが100の同時(または合計)接続しか処理できないことを意味するものではないことに注意してください。リッスンバックログは、リッスンソケットのリッスンキュー内の未処理の(まだ未調整の)接続の数を制限する方法をカーネルに指示するソケット設定です。保留中の接続の数が指定されたサイズを超えると、新しい接続は自動的に拒否されます。機能しているサーバーが定期的に接続を処理している場合、大きなバックログサイズは必要ありません。
マニュアルによれば、-l
オプション:
-l|--listen <num>
set socket listen queue to <n> (default 100, maximum is system
dependent)
サーバーの起動中に-l
または--listen
オプション( ser4815162342 で指定)を使用してuwsgiの待機バックログを変更(増加)するだけで、128を超える値にはなりません。 uwsgiの実行を許可します。 Unixソケットにはシステムレベルの制限もあり、TCP接続リッスンキュー-デフォルトは128です。これを確認できます(Unixソケットの場合):
cat /proc/sys/net/core/somaxconn
uwsgiは patched であったため、uwsgiの起動中に--listen
パラメーターに渡された値がシステムレベルの制限(Linuxカーネルの制限)よりも大きい場合、uwsgiはハードに失敗します。 uwsgiのリッスンキューの制限をシステムレベルの制限(128など)より大きく設定する場合は、まずカーネルの制限を増やす必要があります。次のコマンドを実行して実行できます。
$ echo 4096 > /proc/sys/net/core/somaxconn
$ cat /proc/sys/net/core/somaxconn
4096
または
$ sysctl -w net.core.somaxconn=4096
または、net.core.somaxconn=4096
を/etc/sysctl.conf
に追加して永続的にします(再起動を生き残ります)。
/ proc/sys/net/core/somaxconnのSOMAXCONNを変更して、この制限を増やすことができます。それは単にLinuxチューニングシステムです。
以前の回答で説明したように:
例。 dockerおよびdocker-composeを使用している場合。
docker-compose.yml
で、uWSGIの実行方法を説明するブロックで:
uwsgi_runner:
<<: *app-base
command: /usr/local/bin/uwsgi --ini /app/uwsgi.ini
# ... other settings ...
sysctls:
net.core.somaxconn: 1024 # set max connections to 1024 in kernel
uwsgi.ini
:
[uwsgi]
# ... other settings ...
listen = 1024 # set max connections to 1024 in uWSGI
また、-l
設定ファイルを使用していない場合は、docker-composeコマンド(--listen
またはuwsgi.ini
フラグ)でこのパラメーターを直接変更できます。
uwsgi_runner:
<<: *app-base
command: /usr/local/bin/uwsgi -l 1024 #other-parameters-here