如何告诉 uWSGI 优先使用进程而不是线程来实现负载平衡

如何告诉 uWSGI 优先使用进程而不是线程来实现负载平衡

我在具有 3 个 CPU 核心的 VDS 上安装了 Nginx + uWSGI + Django。uWSGI 配置为 6 个进程,每个进程 5 个线程。现在我想要告诉 uWSGI 使用进程进行负载平衡,直到所有进程都繁忙,然后在需要时使用线程。uWSGI 似乎更喜欢线程,而且我还没有找到任何配置选项来改变这种行为。第一个进程占用了超过 100% 的 CPU 时间,第二个进程占用了大约 20%,其他进程基本没有使用。

我们的网站每秒接收 40 次请求。实际上,即使有 3 个无线程的进程通常也足以处理所有请求。但是请求处理有时会因各种原因(如锁定共享资源等)而挂起。在这种情况下,我们有 -1 个进程。用户不喜欢等待并一次又一次地单击链接。结果所有进程都挂起,所有用户都必须等待。

我会添加更多线程以使服务器更加强大。但问题可能是 python GIL。线程不会使用所有 CPU 核心。因此,多个进程对于负载平衡来说效果更好。但在锁定共享资源和 I/O 等待延迟的情况下,线程可能会有很大帮助。当其中一个线程被锁定时,进程可能会做很多工作。

我不想减少时间限制,除非没有其他解决方案。理论上可以使用线程解决这个问题,我不想向用户显示错误消息或让他等待每个请求,直到没有其他选择。

相关内容