我们正在运行共享相同文件系统的3台Apache Passenger服务器,每台服务器运行11个Rails应用程序。
我们设置了
PassengerPoolIdleTime = 0以确保没有任何应用程序完全耗尽,
PassengerMaxPoolSize = 20以确保我们有足够的进程来运行所有应用程序。
问题是当我在其中一台服务器上运行乘客内存统计时,我看到210个虚拟机!
当我运行乘客身份时,我会看到20个应用程序实例(正如预期的那样)!
任何人都知道发生了什么事吗?我如何确定仍在使用210个实例中的哪一个,以及如何定期杀死这些实例? PassengerMaxInstancesPerApp会做些什么来减少那些看似孤立的实例吗?
答案 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)
也许进程在关机期间卡住了。尝试获取他们的回溯以了解他们正在做什么。