gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:57:55 25 4
gpt4 key购买 nike

我有几个应用程序在 uWSGI 上运行。随着时间的推移,它们中的大多数都会增加内存使用量。我一直将此归因于我没有追踪到的内存泄漏。但最近我注意到增长非常缓慢。我想知道每个 block 是否与正在启动的进程相关。

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

“worker”和“process”的意思一样吗(答案好像是yes)?如果是这样,那么如果我希望数字始终保持不变,我应该这样做:

cheaper = 6
cheaper-initial = 6
processes = 6

最佳答案

是的,uWSGI 将在启动时启动所有进程(或 workers - worker 是 uWSGI 配置中进程的别名),但这将取决于你的应用程序从那时起会发生什么。如果应用程序在启动时导入所有模块,它应该在第一次请求之前完全加载,但如果一些模块在请求时加载,每个工作人员将仅在第一次请求后完全加载(假设任何请求都会加载所有模块。如果不是,只有在执行将加载所有请求的组合后才会完全加载)。

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

默认情况下,cheaper 未启用——这意味着 uWSGI 将在启动时生成所有 worker。如果你想使用更便宜的模式,你至少需要定义cheaper参数。您可以在 documentation 中找到有关使用更便宜系统的更多信息

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

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

关于python - uWSGI 是否在启动时启动所有进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36869199/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com