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

时间:2016-04-26 15:21:21

标签: 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

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

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

cheaper = 6
cheaper-initial = 6
processes = 6

1 个答案:

答案 0 :(得分:6)

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

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

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

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

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