我在没有配置任何交换空间的虚拟服务器上运行带有 apache+passenger 的 rails 应用程序。
该站点通过每天 200K+ 的请求获得了可观的流量,有时整个系统内存不足,导致整个系统出现异常行为。
问题是有什么方法可以配置 apache 或乘客不耗尽内存(例如,当乘客实例开始使用时优雅地重新启动,比如超过 300M 的内存)。
服务器有 4GB 的内存,目前我正在使用乘客的 PassengerMaxRequests 选项,但它似乎不是这里最可靠的解决方案。
目前,我也无法切换到 nginx,所以这不是保留一些空间的选择。
欢迎任何我可能遗漏的聪明想法。
编辑:我的临时解决方案
当 Rails 实例超过一定的内存使用量时,我没有去重启它们。Engine Yard 写了一篇关于ActiveRecord 内存膨胀问题的精彩博文。这是我们对这个问题的主要怀疑。由于我没有太多时间来优化应用程序,我将PassengerMaxRequests 设置为300,并为服务器增加了额外的2GB 内存。从那以后情况一直很好。起初我担心不断重启 Rails 实例会使其变慢,但它似乎没有我应该担心的影响。