我正在尝试在亚马逊微实例(免费套餐中的那个)上运行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
答案 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