Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

428
Views
How to set gunicorn worker number in a kubernetes' pod

I'm running a flask application with gunicorn and gevent worker class. In my own test environment, I follow the official guide multiprocessing.cpu_count() * 2 + 1 to set worker number.

If I want to put the application on Kubernetes' pod and assume that resources will be like

resources:
  limits:
    cpu: "10"
    memory: "5Gi"
  requests:
    CPU: "3"
    memory: "3Gi"

how to calculate the worker number? should I use limits CPU or requests CPU?


PS. I'm launching application via binary file packaged by pyinstaller, in essence flask run(python script.py), and launch gunicorn in the main thread:

def run():
    ...
    if config.RUN_MODEL == 'GUNICORN':
        sys.argv += [
            "--worker-class", "event",
            "-w", config.GUNICORN_WORKER_NUMBER,
            "--worker-connections", config.GUNICORN_WORKER_CONNECTIONS,
            "--access-logfile", "-",
            "--error-logfile", "-",
            "-b", "0.0.0.0:8001",
            "--max-requests", config.GUNICORN_MAX_REQUESTS,
            "--max-requests-jitter", config.GUNICORN_MAX_REQUESTS_JITTER,
            "--timeout", config.GUNICORN_TIMEOUT,
            "--access-logformat", '%(t)s %(l)s %(u)s "%(r)s" %(s)s %(M)sms',
            "app.app_runner:app"
    ]
    sys.exit(gunicorn.run())

if __name__ == "__main__":
    run()

PS. Whether I set worker number by limits CPU (10*2+1=21) or requests CPU (3*2+1=7) the performance still can't catch up with my expectations. Any trial suggestions to improve performance will be welcome under this questions

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

how to calculate the worker number? should I use limits CPU or requests CPU?

It depends on your situation. First, look at the documentation about request and limits (this example is for memory, but the same is for CPU).

f the node where a Pod is running has enough of a resource available, it's possible (and allowed) for a container to use more resource than its request for that resource specifies. However, a container is not allowed to use more than its resource limit.

For example, if you set a memory request of 256 MiB for a container, and that container is in a Pod scheduled to a Node with 8GiB of memory and no other Pods, then the container can try to use more RAM.

If you set a memory limit of 4GiB for that container, the kubelet (and container runtime) enforce the limit. The runtime prevents the container from using more than the configured resource limit. For example: when a process in the container tries to consume more than the allowed amount of memory, the system kernel terminates the process that attempted the allocation, with an out of memory (OOM) error.

Answering your question: first of all, you need to know how many resources (eg. CPU) your application needs. Request will be the minimum amount of CPU that the application must receive (you have to calculate this value yourself. In other words - you must know how much the application needs minimum CPU to run properly and then you need to set the value.) For example, if your application will perform better, when it receives more CPU, consider adding a limit ( this is the maximum amount of CPU an application can receive). If you want to calculate the worker number based on the highest performance, use limit to calculate the value. If, on the other hand, you want your application to run smoothly (perhaps not as fast as possible, but it will consume less resources) use request type.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!