web-dev-qa-db-ja.com

uwsgi:サーバーソケットリスンバックログは100接続に制限されています

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
36
shoujs

100の接続の「リッスンバックログ」は、サーバーが100の同時(または合計)接続しか処理できないことを意味するものではないことに注意してください。リッスンバックログは、リッスンソケットのリッスンキュー内の未処理の(まだ未調整の)接続の数を制限する方法をカーネルに指示するソケット設定です。保留中の接続の数が指定されたサイズを超えると、新しい接続は自動的に拒否されます。機能しているサーバーが定期的に接続を処理している場合、大きなバックログサイズは必要ありません。

マニュアルによれば、-lオプション:

-l|--listen <num>
       set  socket  listen queue to <n> (default 100, maximum is system
       dependent)
38
user4815162342

サーバーの起動中に-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に追加して永続的にします(再起動を生き残ります)。

35
Nabeel Ahmed

/ proc/sys/net/core/somaxconnのSOMAXCONNを変更して、この制限を増やすことができます。それは単にLinuxチューニングシステムです。

3
Lujeni

以前の回答で説明したように:

  1. カーネルの接続を増やす
  2. UWSGIで接続を増やすtoo

dockerおよびdocker-composeを使用している場合。

  1. カーネルの接続を増やす方法

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
  1. UWSGIで接続を増やす方法

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
2
Denis Krumko