在 Apache + Passenger 上运行 Ruby on Rails 应用程序 == 占用太多内存

在 Apache + Passenger 上运行 Ruby on Rails 应用程序 == 占用太多内存

我在服务器上使用 Passenger / Apache 2.2 运行 redmine(一款 RoR 应用)。Passenger 和 ruby​​ 占用了太多内存。

有没有更节省内存的方法来运行 redmine/ruby?

我只需要支持六个 redmine 用户。我想继续使用 Apache,但我愿意接受所有不是“使用 nginx/lighttpd”的建议。

(以下数据来自 512MB VPS,因此 Ruby 仅在 redmine 上就使用了超过 128MB)

user ....... %mem   ....... process
-----------------------------------
www-data ... 13.6   0:00.65 ruby1.8
www-data ... 12.2   0:04.86 ruby1.8

www-data ...  9.4   0:04.15 apache2
www-data ...  9.0   0:13.94 apache2
www-data ...  3.2   0:00.27 apache2

root     ...  2.5   0:00.23 apache2 
root     ...  1.9   0:01.19 ruby1.8 

那么,对我来说,还有什么比 Passenger 更好的呢?

感谢您的想法!

答案1

您可以配置 Apache/passenger 生成的 Rails 进程数。对于您的规模(3 个并发请求),2 个 Rails 进程就足够了:

在你的 apache 配置中设置这些:

PassengerMaxPoolSize 2
PassengerMaxInstancesPerApp 2

MaxPoolSize 决定最多可以启动多少个实例,MaxInstancesPerApp 决定每个 Web 应用程序可以拥有多少个实例。

你可能想玩一下:

PassengerPoolIdleTime 

指定实例在卸载前必须处于空闲状态的秒数。默认值为 300 秒。

我运行了 3 个实例的流量相当高的 Web 应用程序,没有任何问题。

哦,还有——Ruby Enterprise Edition 也有帮助。

答案2

您正在使用 Ruby Enterprise 吗? http://www.rubyenterpriseedition.com/

答案3

要么使用Ruby 企业版(建议与 Passenger 一起使用),或者使用 Ruby 1.9,它也加载速度更快

答案4

我在为 redmine 运行 mongrels/mongrel_cluster 和 apache proxypass 时取得了更大的成功。它不需要那么多性能(它们是一堆非常大/慢的进程,并且倾向于在此基础上调用外部进程。您可能想在基准测试情况下尝试一下并看看。对我来说,设置起来也非常简单。

相关内容