调整Ruby / Rails以在内存较少的系统上工作

时间:2013-03-06 09:25:39

标签: ruby ruby-on-rails-3 memory garbage-collection

我正在尝试在亚马逊微实例(免费套餐中的那个)上运行RoR应用。但是,我无法成功完成rake assets:precompile,因为它应该用完RAM并且系统会终止进程。

首先,我如何确定这是一个低内存问题?

其次,不管第一个问题的答案如何,是否有一些参数可以传递给Ruby解释器以降低内存消耗 - 即使以整体应用程序性能为代价?任何GC调整都可能吗?什么都没有?

注意:与Making ruby on rails take up less memory

类似

PS:我也在系统中添加了一个基于文件的交换区域。如果有帮助,这是cat /proc/meminfo的输出:

MemTotal:         604072 kB
MemFree:          343624 kB
Buffers:            4476 kB
Cached:            31568 kB
SwapCached:        33052 kB
Active:            17540 kB
Inactive:         199588 kB
Active(anon):      11408 kB
Inactive(anon):   172644 kB
Active(file):       6132 kB
Inactive(file):    26944 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:        292840 kB
SwapFree:         165652 kB
Dirty:                80 kB
Writeback:             0 kB
AnonPages:        149640 kB
Mapped:             6620 kB
Shmem:              2964 kB
Slab:              23744 kB
SReclaimable:      14044 kB
SUnreclaim:         9700 kB
KernelStack:        2056 kB
PageTables:         6776 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:      594876 kB
Committed_AS:     883644 kB
VmallocTotal:   34359738367 kB
VmallocUsed:        5200 kB
VmallocChunk:   34359732767 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      637952 kB
DirectMap2M:           0 kB

2 个答案:

答案 0 :(得分:1)

config.assets.initialize_on_precompile = false放在application.rb中,以避免在预编译资产时初始化应用程序和数据库连接。这可能有所帮助。

另一种选择是在本地预编译,然后部署已编译的资产。更多信息http://guides.rubyonrails.org/asset_pipeline.html#precompiling-assets

答案 1 :(得分:0)

第二个问题 - 我在Micro实例上运行Rails应用程序,现在就这样做了。只要你的并发性非常低(一个或两个活跃用户,tops。而且不是超级活跃的)你就可以了。另请注意,如果您尝试猛烈踩CPU(这就是他们执行Micro实例的方式),亚马逊会随意扼杀您的有效CPU。没有GC调整或类似的东西是必要的,只是默认设置是好的。我使用的是旧版本的Passenger,并确保它只是一个流程生成器。股票配置。特别是如果您的应用程序的大块是图像或静态文件,您的主Web服务器将提供大部分内容,而不是Rails。

对于你的第二个问题 - 我刚刚在一个刚刚启动的微实例上检查了一个大型(ish)rails应用程序fat_free_crm。我只是在寻找一些大事。

我计划了一系列资产:预编译并完成了 - 经过很长一段时间。我计时了,它似乎在2分31秒内完成。

我认为您可能仍需要更多交换空间。我会尝试一下开始。如果您仍然之后无法预编译您的资产,那么您还有其他一些问题。

dd if=/dev/zero of=/swapfile bs=1k count=1M

mkswap /swapfile

swapon -f /swapfile