--master 选项在 uwsgi 中有什么实际作用?

Mad*_*ern 10 uwsgi

虽然 uwsgi 文档对于已经熟悉服务器管理的人来说可能很好,但对于尝试学习它的人来说绝对没有太大帮助。我希望有人可以帮助解决以下问题。

  1. 我读到,它可以正常关闭/重新加载进程。但是,这是什么意思?优雅关闭的替代方法是什么?

  2. 这些进程什么时候可以优雅/丑陋地关闭?是不是进程崩溃了?或者,如果我选择关闭 uwsgi,例如按 ctrl+c?或者在其他一些情况下?我可以测试一下这种优雅性吗,例如引起 smth 崩溃/关闭,然后在有和没有 master 的情况下查看结果?

  3. 除了让进程正常关闭之外,它还能做什么?

  4. 由于启用主进程是可选的,因此肯定存在使用它没有好处的情况。这些案例是什么?

Dan*_*ner 10

我同意你的观点,Uwsgi 文档非常好。

现在:

1)这意味着 uwsgi 服务器将优雅地关闭/重启/重新加载其主进程和它的工作进程,优雅地向它们发送 'SIGHUP' 信号,允许进程响应该信号:“刷新缓冲区,关闭任何已建立的连接/套接字,等”(--reload)选项

2)“优雅”的替代方法是关闭/重新加载uwsgi应用程序,就像你说的“脏”。这意味着发送一个主进程及其工作人员'SIGTERM'信号,因此残酷地重新加载所有工作人员和主进程(--die-on-term)。还有'--stop',它是SIGINT,实际上会杀死您的整个uWsgi堆栈,这也是'您的键盘中断Ctl + C行为'

3)您可以使用这些选项来处理进程并优雅地或粗暴地关闭它们,但行为是众所周知的,粗暴地关闭任何应用程序/崩溃不会引起很好的共鸣,不允许磁盘 i/o 操作完成,缓存内容陈旧,丢失状态等

4)是的,有时您不想要 uwsgi 主进程:来自文档:

“作为 uWSGI 进程管理功能的一部分,可以启用主进程来更好地管理工作进程。启用此功能后,WSGI 脚本文件或模块将被预加载到父主进程中。然后工作进程将从这个主进程分叉. 如果 WSGI 脚本或模块在加载时创建了一个应该在每个工作进程中运行的后台线程,这可能会导致问题,因为当工作进程分叉时,该后台线程将被终止。”

希望这能回答你的问题。