云服务 阿里云服务最低配置 512 M 内存跑 Unicorn Rails 老报内存不足

gazeldx · 2014年08月27日 · 最后由 gazeldx 回复于 2014年09月10日 · 5494 次阅读

RAILS_ENV=production rails console

/usr/local/rvm/gems/[email protected]/gems/spring-1.1.3/lib/spring/application.rb:153:in `fork': Cannot allocate memory - fork(2) (Errno::ENOMEM)
    from /usr/local/rvm/gems/[email protected]/gems/spring-1.1.3/lib/spring/application.rb:153:in `serve'
    from /usr/local/rvm/gems/[email protected]/gems/spring-1.1.3/lib/spring/application.rb:128:in `block in run'
    from /usr/local/rvm/gems/[email protected]/gems/spring-1.1.3/lib/spring/application.rb:122:in `loop'
    from /usr/local/rvm/gems/[email protected]/gems/spring-1.1.3/lib/spring/application.rb:122:in `run'
    from /usr/local/rvm/gems/[email protected]/gems/spring-1.1.3/lib/spring/application/boot.rb:18:in `<top (required)>'
    from /usr/local/rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /usr/local/rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from -e:1:in `<main>'
$ free -mt
                     total       used       free     shared    buffers     cached
Mem:              490        468         21          0         15         35
-/+ buffers/cache:         418         71
Swap:                0            0          0
Total:              490        468         21

就跑了 postgresql, unicorn rails, cronjob 里只有一个每天执行一次 rails runner Model.method 而已。 是不是 512 太少了?我需要升级内存吗?

换 go 或者 scala 吧

加虚拟内存。

你的 unicorn 配置文件中开启了几个进程?这么点内存可能只够开一个了。

#3 楼 @lgn21st config/unicorn.rb : worker_processes 1 worker 我就开了一个。

#3 楼 @lgn21st 不错,谢谢你帮我 markdown。

#4 楼 @gazeldx unicorn 通过 USR2 自动重启的顺序是先启动一个新的进程,然后在杀掉旧的进程,等于在启动的那个时间点要跑两个进程,所以内存不够了,且 swap 也不够了,没有什么其他好办法,要不就每次都直接干掉 unicorn,然后重启,要不就加内存吧。

上面那条回复有误,应该是楼主跑了 spring,等同于已经在内存中跑了一个 rails 进程了,启动 unicorn 的时候内存不够了,没有办法,加内存吧。

换 passenger 试试?一体化设计加上没有 zero down time 的重启,可能内存就足够了

楼主系统用 32 位的

thin 可以省不少

1G 就够了,我的稳稳的

#9 楼 @huacnlee 我用你的办法,重装系统,用 32 位的,现在没问题。 谢谢拉!

#9 楼 @huacnlee 聚石塔没 32 位系统啊

#13 楼 @gazeldx 怎么装的?麻烦指教

还有一个办法就是开启下 swap,你这里没有开:http://open.taobao.com/doc/detail.htm?id=102237

我用阿里云,购买 32BIT Ubuntu 就好了。 #14 楼 @liuzihua 聚石塔的确定没有 32BIT 的。阿里云有!

需要 登录 后方可回复, 如果你还没有账号请 注册新账号