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