ruby が NoMemoryError ,segmentation fault 等で動かなくなった場合の対処

(

)

by

in

CentOS 等に入っている prelink (共有ライブラリのリンク情報を予め付与するもの)が悪さをして、ruby 等が動作しなくなっている事がある。
例えば、以下のようなケース

$ rails c
:29: [BUG] Segmentation fault
ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-linux]

-- control frame ----------
c:0005 p:---- s:0016 b:0016 l:000015 d:000015 CFUNC  :require
c:0004 p:0013 s:0012 b:0012 l:000011 d:000011 METHOD :29
c:0003 p:0011 s:0007 b:0007 l:000a28 d:002150 EVAL   /usr/bin/rails:9
c:0002 p:---- s:0004 b:0004 l:000003 d:000003 FINISH
c:0001 p:0000 s:0002 b:0002 l:000a28 d:000a28 TOP
---------------------------
-- Ruby level backtrace information ----------------------------------------
/usr/bin/rails:9:in `
' :29:in `require' :29:in `require' $ gem -v /usr/bin/ruby: failed to allocate memory (NoMemoryError)

対処法としては、prelink を外す。

# prelink-u /usr/bin/ruby

もしくは、元のファイルがある場合は、コピーする。

CentOS5のデフォルトでは、prelink は、cron (/etc/cron.daily/prelink) で定期的に実行される設定になっているので、
設定ファイル(/etc/prelink.conf)で ruby を対象外に指定しておく

-b /usr/bin/ruby

参考:http://ysmt.blog21.fc2.com/blog-entry-319.html