我们的设置在以下方面是独一无二的:
由于这些进程中的每一个都有可能在20到200 MB的内存之间运行,因此Django进程的总内存占用量“太大”。即它会快速超过服务器上的可用物理内存,从而导致大量交换。
我看到当前设置有两个具体问题:
我们正在考虑哪些安装需要在操作系统的物理内存中。在我看来,我们可以做得更好。具体来说,当前获得更多流量的安装会因为大量的现成工作人员而变得更好。另外:即使后续请求足够快,我们也可以处理初始请求的1-2s,因此在大量时间内没有流量的安装甚至可以使用0个就绪工作人员。我认为我们可以“比操作系统更智能”的一个特定原因:服务器在缓慢的一天重新启动后,服务器响应速度更快(差异非常大,可以用肉眼观察到)。这对我来说,即使他们当前没有活跃地为一整天的请求提供服务,大概交换过程的开销也很大。
某些请求比其他请求具有更大的内存需求。曾经处理过这样一个请求的进程已经从操作系统中获取了内存,但是由于分段可能无法返回它。能够退休记忆猪是值得的。 (Currenlty我们只是在Apache上配置了一个retart-after-n-requests,但这不是在碎片后特别触发的。)
我的解决方案的想法是让主服务器根据流量方面的每个安装需求,每个安装启动/减少工作人员。进一步的细节: *配置一些一般的系统约束,即一旦服务器变得繁忙,在启动过程中就不那么慷慨了 *重启记忆猪。
有许多python(WSGI)服务器可用。他们中的哪一个(容易)允许这样的设置。什么是好的指针?