amazon-web-servicesamazon-ec2gunicornworkerworker-process

What is the appropriate number of Gunicorn workers for each Amazon Instance Type?


I'm currently trying to figure out what the appropriate number of workers is for each Amazon Instance Type. I used to run one Gunicorn worker, however that proved to be quite slow.

Many developers are currently using this formula to gauge how many workers would be suitable:

NUM_WORKERS=3  #recommended formula here is 1 + 2 * NUM_CORES

The problem I'm having is that Amazon isn't quite clear as to the number of cores each instance is running. For example, an M1 Small Instance has 1 EC2 Compute Unit (1 virtual core with 1 EC2 Compute Unit)

What does that essentially mean? That it has one core? or that it has two cores?


Solution

  • I know this is a old question. But I think I have a better answer to this question. Gunicorn docs suggests that 2n+1 [gunicorn -w <2n+1> myapp:wsgi] is a good guess for number of workers (Yes, n = number of cores). I came up with a tiny shell script to apply this formula. All you need to do is this:

    gunicorn -w $(( 2 * `cat /proc/cpuinfo | grep 'core id' | wc -l` + 1 )) myapp:wsgi
    

    Where the command

    cat /proc/cpuinfo | grep 'core id' | wc -l
    

    will return the total number of actual CPU cores (n). So

    $(( 2 * `cat /proc/cpuinfo | grep 'core id' | wc -l` + 1 ))
    

    equates to 2n+1 formula.

    This will apply 2n+1 formula to all the linux-based machines. You dont need to know the number of workers for each type of instance or anything like that.

    Reference: http://dhilipsiva.com/2015/10/22/appropriate-number-of-gunicorn-workers.html