【问题标题】:Tuning Ruby / Rails to work on systems with less memory调整 Ruby / Rails 以在内存较少的系统上工作
【发布时间】:2013-03-06 09:25:38
【问题描述】:

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

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

其次,不管第一个问题的答案如何,是否有一些参数可以传递给 Ruby 解释器以使其消耗更少的 RAM - 即使以整体应用程序性能为代价?任何可能的 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

【问题讨论】:

  • 好的,所以我的代表损失了 50 分,但仍然无法为此找到满意的解决方案:(

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    第二个问题 - 我已经在 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-30
      • 2010-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-14
      相关资源
      最近更新 更多