AWS Beanstalk 中的 Wsgi 进程和线程数设置

ank*_*r90 3 amazon-web-services amazon-elastic-beanstalk

我有一个 AWS beanstalk 环境,并且有旧的 wsgi 设置(如下所示),我不知道它在内部是如何工作的,有人可以指导我吗?

NumProcesses:7 -- number of process
NumThreads:5 -- number of thread in each process
Run Code Online (Sandbox Code Playgroud)

由于 AWS beanstalk 级别中没有内存和 cpu 设置,因此此配置如何使用内存和 cpu。

Dr *_*tan 5

添加到@Marcin

\n
    \n
  1. 亚马逊linux 2使用gunicorn
  2. \n
  3. 工人是gunicorn中的进程
  4. \n
\n

Gunicorn 应该只需要 4-12 个工作进程即可每秒处理数百或数千个请求。

\n

Gunicorn 依赖操作系统在处理请求时提供所有负载平衡。一般来说,我们(gunicorn 创建者)建议 (2 x $num_cores) + 1 作为开始的工作人员数量。虽然不太科学,但该公式基于这样的假设:对于给定的核心,一个工作线程将从套接字读取或写入,而另一个工作线程正在处理请求。

\n

要查看选项设置中的设置如何映射到gunicorn,您可以通过 ssh 进入您的 eb 实例,请转至

\n
$ eb ssh\n$ cd cd /var/app/current/\n$ cat Procfile \nweb: gunicorn --bind 127.0.0.1:8000 --workers=3 --threads=20 api.wsgi:application \n
Run Code Online (Sandbox Code Playgroud)\n

--threads\n正整数,通常在 2-4 x $(NUM_CORES) 范围内。您\xe2\x80\x99 将希望稍微改变一下,以找到最适合您的特定应用程序\xe2\x80\x99 工作负载的方法。

\n

线程选项仅适用于 gthread 工作线程类型。Gunicons 默认工作线程类是sync,如果您尝试使用同步工作线程类型并将线程设置设置为大于 1,则将自动使用 gthread 工作线程类型

\n

基于以上所有我个人会选择

\n
workers = (2 x $NUM_CORES ) + 1\nthreads = 4 x $NUM_CORES \n
Run Code Online (Sandbox Code Playgroud)\n

对于具有 2 个核心的 t3.medum 实例,可转换为

\n
workers = 5\nthreads = 8\n
Run Code Online (Sandbox Code Playgroud)\n

显然,您需要根据您的用例进行调整,并将它们视为默认值,这很可能不适合您的特定应用程序用例,请阅读下面的参考资料,了解如何为您的用例选择正确的设置

\n

参考:

\n

参考:Gunicorn 工作线程和线程\n参考:https://medium.com/building-the-system/gunicorn-3-means-of-concurrency-efbb547674b7 \n参考: https: //docs.gunicorn.org/en/stable /settings.html#worker-class

\n