【问题标题】:uwsgi : why two processes are loaded per each app? [closed]uwsgi:为什么每个应用程序加载两个进程? [关闭]
【发布时间】:2013-09-18 00:02:07
【问题描述】:
root@www:~# ps aux | grep uwsgi
root      4660  0.0  0.0  10620   892 pts/1    S+   19:13   0:00 grep --color=auto uwsgi
root     19372  0.0  0.6  51228  6628 ?        Ss   06:41   0:03 uwsgi --master --die-on-term --emperor /var/www/*/uwsgi.ini
root     19373  0.0  0.1  40420  1292 ?        S    06:41   0:03 uwsgi --master --die-on-term --emperor /var/www/*/uwsgi.ini
www-data 19374  0.0  1.9  82640 20236 ?        S    06:41   0:03 /usr/local/bin uwsgi --ini /var/www/app2/uwsgi.ini
www-data 19375  0.0  2.4  95676 25324 ?        S    06:41   0:03 /usr/local/bin uwsgi --ini /var/www/app3/uwsgi.ini
www-data 19385  0.0  2.1  90772 22248 ?        S    06:41   0:03 /usr/local/bin uwsgi --ini /var/www/app2/uwsgi.ini
www-data 19389  0.0  2.0  95676 21244 ?        S    06:41   0:00 /usr/local/bin uwsgi --ini /var/www/app3/uwsgi.ini

上面是ps uwsgi 进程的输出。奇怪的是,对于每个 ini 文件,都加载了两个实例——即使我有两个 uwsgi 主机。这正常吗?

uwsgi的部署策略是

  • 皇帝由暴发户管理
  • Emperor 在 apps 文件夹中搜索每个 uwsgi.ini

uwsgi.conf 用于新贵:

# simple uWSGI script

description "uwsgi tiny instance"
start on runlevel [2345]
stop on runlevel [06]

exec uwsgi --master --die-on-term --emperor "/var/www/*/uwsgi.ini"

uwsgi.ini(我有两个应用程序,两个应用程序都有相同的ini,只是应用程序# 编号):

[uwsgi]
# variables
uid = www-data
gid = www-data
projectname = myproject
projectdomain = www.myproject.com
base = /var/www/app2
# config
enable-threads
protocol = uwsgi
venv = %(base)/
pythonpath = %(base)/
wsgi-file = %(base)/app.wsgi
socket = /tmp/%(projectdomain).sock
logto = %(base)/logs/uwsgi.log

【问题讨论】:

  • 您是否仅通过删除 --master 标志来解决此问题?即使我删除了--master 标志并且我只有一个皇帝进程,我仍然会为我的应用程序生成两个子进程。

标签: python nginx wsgi uwsgi


【解决方案1】:

您使用 --master 选项启动它,该选项产生一个主进程来控制工作人员。

来自官方文档https://uwsgi-docs.readthedocs.org/en/latest/Glossary.html?highlight=master

大师

uWSGI 的内置 prefork+threading 多线程管理模式,通过轻按主开关激活。对于所有实际的服务部署,不使用主模式并不是一个好主意。

你应该阅读http://uwsgi-docs.readthedocs.org/en/latest/Options.html#master 而且这个线程可能会为您提供一些信息。 uWSGI: --master with --emperor spawns two emperors

一般不建议 --master 和 --emperor 一起使用。

【讨论】:

【解决方案2】:

我对这个主题的有根据的猜测是它确实应该转移到服务器故障。 但这里是答案:

你应该已经启动了两次 upstart 脚本;-)

只需尝试使用 SIGTERM 杀死主 ROOT 进程,看看子进程是否死亡。 如果你已经运行了两次 upstart 脚本,你将有一个 ROOT 和两个孩子。

【讨论】:

    猜你喜欢
    • 2023-02-24
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-19
    • 1970-01-01
    • 2019-07-02
    • 2016-07-20
    相关资源
    最近更新 更多