Your server socket listen backlog is limited to 100 connections
Asked Answered
W

4

47

I run a flask app on uwsgi. I use supervisor to manage uwsgi process. I find the log saying that

your server socket listen backlog is limited to 100 connections.

How to overcome 100 connections limitation? My running script is as below:

[program:myapp]
command=uwsgi --master -s /tmp/app.sock --module myapp:app --processes 2 -H /srv/sites/mysite chmod-socket 666 --enable-threads
Warmup answered 9/9, 2012 at 14:44 Comment(1)
Are you sure that is what you need to do? If you accumulate a backlog of 100 connections, you must be using at least about 99% of your capacity, and then increasing the limit will only give you an extremely minimal breathing space before the number of incoming connections exceed what you can possibly serve. It would be much more productive to figure out how you can serve the requests faster.Triennial
S
51

Note that a "listen backlog" of 100 connections doesn't mean that your server can only handle 100 simultaneous (or total) connections - this is instead dependent on the number of configured processes or threads. The listen backlog is a socket setting telling the kernel how to limit the number of outstanding (as yet unaccapted) connections in the listen queue of a listening socket. If the number of pending connections exceeds the specified size, new ones are automatically rejected. A functioning server regularly servicing its connections should not require a large backlog size.

According to the manual, you can change the listen backlog with the -l option:

-l|--listen <num>
       set  socket  listen queue to <n> (default 100, maximum is system
       dependent)
Spoliate answered 9/9, 2012 at 14:49 Comment(0)
F
45

Simply increasing the uwsgi's listen backlog using the -l or --listen option (as pointed by user4815162342) while starting the server, to a value greater than 128 might stop uwsgi from starting up. There is also a system level limit on Unix socket and TCP connection listen queue, whose default is 128, that needs to be increased.

You can verify that setting like this:

cat /proc/sys/net/core/somaxconn

uwsgi has been patched such that if the value passed to --listen parameter while starting uwsgi is greater than the system level limit, it'll cause uwsgi to fail hard. If you want set uwsgi's listen queue limit greater than the system level limit, you must first increase the kernel's limit. That can be done executing the following commands:

$ echo 4096 > /proc/sys/net/core/somaxconn

Or

$ sysctl -w net.core.somaxconn=4096

Or, add net.core.somaxconn=4096 to /etc/sysctl.conf for it to persist through a reboot.

Faqir answered 6/4, 2016 at 13:22 Comment(0)
A
10

As it was described in previous answers:

  1. Increase connections in kernel
  2. Increase connections in uWSGI too

Example. If you are using docker and docker-compose.

  1. How to increase connections in kernel

In docker-compose.yml, in block where you describe how to run 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. How to increase connections in uWSGI

In uwsgi.ini:

[uwsgi]
# ... other settings ...
listen = 1024 # set max connections to 1024 in uWSGI

Also, you can change this parameter directly in docker-compose command (-l or --listen flag) if you are not using uwsgi.ini settings file:

uwsgi_runner:
    <<: *app-base
    command: /usr/local/bin/uwsgi -l 1024 #other-parameters-here
Astute answered 23/7, 2018 at 12:35 Comment(3)
To have a perfect answer please describe how to Increase connections in kernel as you wrote.Slavonic
Setting net.core.somaxconn: 1024 is a step to increase connections in kernel, if your environment works in docker.Astute
Hello Denis, edit your answer, don't answer in the comment form, thanks :)Slavonic
C
3

You can modify SOMAXCONN in your /proc/sys/net/core/somaxconn to increase this limit.

It's simply linux tuning systems.

Concurrence answered 10/9, 2012 at 21:27 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.