我已经在具有 3 个 CPU 内核的 VDS 上安装了 Nginx + uWSGI + Django。uWSGI 配置为 6 个进程和每个进程 5 个线程。现在我想告诉 uWSGI 使用进程进行负载平衡,直到所有进程都忙,然后在需要时使用线程。似乎 uWSGI 更喜欢线程,我还没有找到任何配置选项来改变这种行为。第一个进程占用超过 100% 的 CPU 时间,第二个进程占用大约 20% 的 CPU 时间,而另一个进程大多不使用。
我们的站点接收 40 r/s。实际上,即使有 3 个没有线程的进程通常也足以处理所有请求。但是请求处理有时会由于各种原因(例如锁定共享资源等)挂起。在这种情况下,我们有 -1 进程。用户不喜欢等待并一次又一次地点击链接。结果,所有进程都挂起,所有用户都必须等待。
我会添加更多线程以使服务器更健壮。但问题可能是python GIL。线程不会使用所有 CPU 内核。因此,多个进程在负载平衡方面工作得更好。但是在锁定共享资源和 i/o 等待延迟的情况下,线程可能会有很大帮助。一个进程在其中一个线程被锁定时可能会做很多工作。
在没有其他解决方案之前,我不想减少时间限制。理论上可以用线程解决这个问题,我不想向用户显示错误消息或让他等待每个请求,直到没有其他选择。