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

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

虽然 uwsgi 文档对于已经熟悉服务器管理的人来说可能还不错,但对于尝试学习它的人来说肯定没什么帮助。我希望有人能帮助解决以下问题。

  1. 我读到,它可以正常关闭/重新加载进程。但这是什么意思?除了正常关闭,还有什么其他方法吗?

  2. 这些进程何时可以优雅/丑陋地关闭?是进程崩溃时吗?还是我选择关闭 uwsgi,例如按 ctrl+c?还是在其他情况下?我可以测试这种优雅性吗,例如促使某些进程崩溃/关闭,然后查看有无 master 的结果?

  3. 除了让进程正常关闭之外它还能做其他事情吗?

  4. 既然启用主进程是可选的,那么肯定存在使用它没有好处的情况。这些情况是什么?

答案1

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

现在:

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

2) 除了“优雅地”之外,还有一种替代方法,就是关闭/重新加载 uwsgi 应用程序,就像你说的“dirty”一样。这意味着向主进程及其工作进程发送“SIGTERM”信号,从而粗暴地重新加载所有工作进程和主进程 (--die-on-term)。还有“--stop”,即 SIGINT,它实际上会杀死你的整个 uWsgi 堆栈,这也是“你的键盘中断 Ctl+C 行为”

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

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

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

希望这能回答你的问题。

相关内容