uWSGI: --master with --emperor生成两个emperor

30

我可以看到,如果我这样启动uwsgi:

sudo /usr/local/bin/uwsgi --emperor /etc/uwsgi/vassals --uid www --gid www

它创建一个皇帝副本。但是,如果我额外使用--master启动它(如这里建议的那样),它将创建两个皇帝副本。在使用--emperor时使用--master有意义吗?我认为不是,但如果我没有使用该选项运行它,我会收到以下警告:*** WARNING: you are running uWSGI without its master process manager ***
3个回答

38

这里是官方文档的内容:

通常情况下,除非需要特定的主机特性(比如高级日志记录),否则不应该在emperor中使用--master参数。

如果你想知道--master选项的作用,这里有答案:

master

uWSGI内置的预派生+线程多工作进程管理模式,在打开主控开关时激活。对于所有实际的服务部署来说,不使用主控模式并不是一个好主意。

因此,总结一下:

  • 对于普通的uWSGI实例,请使用--master选项,
  • 对于uWSGI Emperor,请不要使用--master选项。

6
这是否意味着“警告”日志信息是不必要的? - Max
我猜是的。也许uwsgi实例无法区分它是否被调用为emperor - 我不知道。 - MrKsn

3

我不同意 - 文档说在生产中使用它不是一个好主意; 我猜这个双重否定可能需要更清晰地表达。

因此,似乎使用它是一个好主意,因此会出现警告。


据我了解,生产服务器不应该独立运行uwsgi实例 - 我的意思是没有任何“监护人”。如果您运行“简单”的uwsgi实例,那么它只是一个实例 - 没有分支/线程,如果它崩溃,除了您以外没有人会再次启动它。因此,您可以运行uwsgi --master,它将创建uwsgi“监护人”,监护人将启动多个“简单”的uwsgi实例,具有fork /线程和重启能力。 - MrKsn
然而,Emperor已经为其所有的诸侯处理了叉子、线程和重启,所以没有必要使用--master。如果我说错了,请纠正我。 - MrKsn

0

我想为在皇帝下运行的附属国添加一些使用切腹模式的具体信息。如果主服务器没有在附属国的配置中,无论是否在皇帝配置中指定了主服务器/切腹,切腹都不会起作用。给出一个皇帝配置示例:

[uwsgi]
emperor = ...
daemonize = ...
emperor-pidfile = ...
vassal-set = enable-metrics=1
emperor-stats = 127.0.0.1:6000

家臣们需要以下条件才能进行切腹:

[uwsgi]
strict
processes = 4
stats = 127.0.0.1:5000
memory-report
daemonize = ...
pidfile = ...
close-on-exec
py-tracebacker = /tmp/tbsocket
master
harakiri = 5
harakiri-verbose

请注意,master和harakiri都存在于vassal中,在emperor配置中设置它们对于uwsgi版本2.0.12不会对vassals产生影响。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接