Phusion-Passenger似乎创造了许多(140+)孤儿进程

时间:2009-10-06 17:53:52

标签: ruby-on-rails ruby apache passenger

我们正在运行共享相同文件系统的3台Apache Passenger服务器,每台服务器运行11个Rails应用程序。

我们设置了

  1. PassengerPoolIdleTime = 0以确保没有任何应用程序完全耗尽,

  2. PassengerMaxPoolSize = 20以确保我们有足够的进程来运行所有应用程序。

  3. 问题是当我在其中一台服务器上运行乘客内存统计时,我看到210个虚拟机!

    当我运行乘客身份时,我会看到20个应用程序实例(正如预期的那样)!

    任何人都知道发生了什么事吗?我如何确定仍在使用210个实例中的哪一个,以及如何定期杀死这些实例? PassengerMaxInstancesPerApp会做些什么来减少那些看似孤立的实例吗?

4 个答案:

答案 0 :(得分:2)

事实证明,我们实际上有许多Apache工作进程正在运行,其中只有24个是Passenger进程(问一个比我更有经验的人)。我们实际上托管了比我想象的更多的网站和共享主机帐户。 感谢所有的回复!

答案 1 :(得分:1)

通过运行此命令,您可以获得有关Rails进程数量的明确答案:

ps auxw | grep Rails | wc -l

我怀疑你确实有超过100个进程在运行,因为每个进程大约50 MB,他们共同消耗超过5 GB的RAM和/或交换,你的系统可能已经放慢了速度。

答案 2 :(得分:0)

不是一个答案,而是一些有用的诊断建议。

尝试将Rack::ProcTitle中间件添加到您的堆栈中。我们多年来一直在生产中使用它。运行ps aux应该提供有关工作人员的信息(空闲,处理特定请求等等)。

我不认为这些过程是由乘客直接产生的。它可能会让您的应用更深入。

答案 3 :(得分:0)

也许进程在关机期间卡住了。尝试获取他们的回溯以了解他们正在做什么。