在 4 核盒子上哪种场景可以提供更好的设置:
4 个 uWSGI 进程,使用深队列来处理请求
具有深度队列的 8 个 uWSGI 进程
使用相对较浅的队列来处理与服务器内存允许的一样多的进程?
答案1
从历史上看,普遍的看法是,Web 服务器性能(即高波动性工作负载,每个事务的生命周期相对较短)更多地取决于可用内存,而不是核心数量。操作系统进程调度程序将采用比在其可用处理器之间循环调度最耗 CPU 的进程更深层次的魔法;与其试图猜测调度程序,不如确保您有足够的 RAM 来保持比预期并发请求负载更多的浅队列进程处于活动状态,并让调度程序处理如何及时获得它们的周期。
答案2
答案是,这取决于您所服务的应用程序,特别是运行时。
如果您使用 Python 或 Ruby,那么您可能希望每个逻辑核心一个进程 - 除非您的应用程序使用大量能够使用多个核心的本机代码。
如果您使用 Go 或其他能够在多个核心上同时运行代码的语言,那么您只需要一个进程。
至于您是否需要深队列或浅队列(套接字监听队列长度),这至少需要与进程数 x 线程数一样长,并且取决于 uWSGI 前面的内容。