2

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

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

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

注意:类似于让 ruby​​ on rails 占用更少的内存

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
4

2 回答 2

1

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

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

于 2013-03-15T15:44:31.787 回答
0

首先是第二个问题 - 我已经在 Micro 实例上运行 Rails 应用程序,现在就这样做。只要您的并发性非常低(一个或两个活跃用户,最高。而且也不是超级活跃),您就可以了。另请注意,如果您尝试过度使用 CPU(这就是他们执行微型实例的方式),亚马逊会在需要时任意降低您的有效 CPU。不需要 GC 调整或类似的东西,只需默认设置即可。我使用的是旧版本的Passenger,并确保它只启动一个进程生成器。库存配置。特别是如果您的应用程序的大块是图像或静态文件,您的主 Web 服务器将提供大部分内容,而不是 Rails。

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

我计时了一系列 assets:precompile 并且它确实完成了 - 经过很长时间。我计时了,它似乎在 2 分 31 秒内完成。

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

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

mkswap /swapfile

swapon -f /swapfile

于 2013-03-13T20:56:08.440 回答