我已经在具有3个CPU核心的VDS上安装了Nginx + uWSGI + Django。 uWSGI为每个进程configuration6个进程和5个线程。 现在我想告诉uWSGI使用进程进行负载平衡,直到所有进程都忙碌,然后在需要时使用线程。 看来uWSGI更喜欢线程,我还没有find任何configuration选项来改变这种行为。 第一个进程占用了100%的CPU时间,第二个占用了大约20%,另外一个进程大部分都不使用。
我们的网站收到40 r / s。 实际上,即使有3个进程没有线程,通常是处理所有的请求。 但是由于诸如locking共享资源等各种原因,请求处理会不时挂起。在这种情况下,我们有-1个进程。 用户不喜欢等待,然后再次点击链接。 因此,所有进程都会挂起,所有用户都必须等待。
我会添加更多的线程,使服务器更健壮。 但问题可能是pythonGIL。 线程不会使用所有的CPU核心。 所以多个进程在负载平衡方面效果更好。 但是,如果locking共享资源和I / O等待延迟,线程可能会有很大的帮助。 一个进程可能会做很多工作,而其中一个线程被locking。
我不想减less时间限制,直到没有其他解决scheme。 理论上可以用线程来解决这个问题,我不想给用户显示错误信息,或者让他在每个请求中等待,直到没有其他select。