uWSGI是否在启动时启动所有进程?

Joh*_*hir 6 python uwsgi

我在uWSGI上运行了几个应用程序.随着时间的推移,大多数内存的使 我总是将此归因于我没有追踪到的内存泄漏.但最近我注意到增长非常大.我想知道每个块是否与正在启动的进程相关联.

uWSGI是否在引导时启动所有进程,或者只有在有足够的请求进入必要时才启动新的进程?

这是一个示例配置:

[uwsgi]
strict = true

wsgi-file = foo.py
callable = app

die-on-term = true

http-socket = :2345

master = true
enable-threads = true
thunder-lock = true
processes = 6
threads = 1

memory-report = true
Run Code Online (Sandbox Code Playgroud)

更新:这看起来相关:http://uwsgi-docs.readthedocs.org/en/latest/Cheaper.html

"工人"是否意味着与"过程"相同(答案似乎是肯定的)?如果是这样,那么似乎我希望数字始终保持不变,我应该这样做:

cheaper = 6
cheaper-initial = 6
processes = 6
Run Code Online (Sandbox Code Playgroud)

Gwy*_*idD 6

是的,uWSGI将在启动时启动所有进程(或者worker-worker是uWSGI配置中的进程的别名),但它将取决于您的应用程序将从那时起的内容.如果应用程序在引导时导入所有模块,则应在第一次请求之前完全加载,但如果在请求时加载某些模块,则每个工作程序仅在第一次请求后才会完全加载(假设任何请求将加载所有模块.如果不是,只有在完成将加载所有请求的请求组合后才会完全加载.

但即使在加载所有模块之后,应用程序内存使用也不会是恒定的.每个请求都可能会累积一些日志记录,全局变量,调试信息等.如果你正在使用任何框架,它可能会保存一些数据用于调试,统计等.

默认情况下,不启用更便宜 - 这意味着uWSGI将在启动时生成所有工作程序.如果要使用更便宜的模式,则需要至少定义cheaper参数.有关使用更便宜的系统的更多信息,您可以在文档中找到

uWSGI中还有许多其他系统可以根据请求数量来控制负载.例如

如果您担心uWSGI会占用太多资源,那么也有解决方案: