0

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

我们已经设置

  1. PassengerPoolIdleTime = 0 以确保没有任何应用程序完全消失,并且

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

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

当我运行乘客状态时,我看到了 20 个应用程序实例(如预期的那样)!

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

4

4 回答 4

2

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

于 2009-10-07T20:48:04.080 回答
1

通过运行以下命令,您可以获得关于您拥有多少 Rails 进程的明确答案:

ps auxw | grep Rails | wc -l

我怀疑你确实有超过 100 个进程在运行,因为每个进程大约 50 mb,它们共同消耗超过 5 GB 的 RAM 和/或交换,你的系统可能会慢到爬行。

于 2009-10-06T20:17:34.217 回答
0

与其说是答案,不如说是一些有用的诊断建议。

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

我不会假设这些过程是由乘客直接产生的。它可能会深入到您的应用程序中。

于 2009-10-06T18:18:40.910 回答
0

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

于 2009-10-07T07:07:56.087 回答