ruby-1.9.3-p374 =>ruby-1.9.3-p545 *** buffer overflow detected ***: ruby terminated
mechanizeを使いマルチスレッドで同時に複数のページにアクセスするプログラムを使っていた。
mechanizeでDNS 解決(gethostbyname)などのタイムアウトを制御するため
require 'em-resolv-replace' または
require 'resolv-replace'
(参照: http://seesaawiki.jp/ruby_mechanize/d/Mechanize )
を使ったところ
buffer overflow detected ***: ruby terminated
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(__fortify_fail+0x5c)[0x7f912afacf6c]
/lib/x86_64-linux-gnu/libc.so.6(+0x109e40)[0x7f912afabe40]
/lib/x86_64-linux-gnu/libc.so.6(+0x10aefe)[0x7f912afacefe]
/home/user/.rvm/rubies/ruby-1.9.3-p374/lib/libruby.so.1.9(rb_fd_set+0x79)[0x7f912b3f6f39]
/home/user/.rvm/rubies/ruby-1.9.3-p374/lib/libruby.so.1.9(+0x8bbf1)[0x7f912b2edbf1]
/home/user/.rvm/rubies/ruby-1.9.3-p374/lib/libruby.so.1.9(rb_ensure+0xb6)[0x7f912b2cc066]
/home/user/.rvm/rubies/ruby-1.9.3-p374/lib/libruby.so.1.9(+0x89124)[0x7f912b2eb124]
/home/user/.rvm/rubies/ruby-1.9.3-p374/lib/libruby.so.1.9(+0x18a1ac)[0x7f912b3ec1ac]
/home/user/.rvm/rubies/ruby-1.9.3-p374/lib/libruby.so.1.9(+0x181eeb)[0x7f912b3e3eeb]
………
と言う事態に陥った。
結論はrvmでルビーのアップグレード
ruby-1.9.3-p374 =>ruby-1.9.3-p545
で解決。
結論に至る途中
Ubuntuでプロセスが開けるファイルディスクリプタの上限を変更して
ulimit -n ; 1024 =>65536
(参照: http://d.hatena.ne.jp/akishin999/20130213/1360711554 )
とした処、「*** buffer overflow detected ***: ruby terminated」がでるまでの時間が1024の時よりも上がったので一定の効果は有ったようだが本質的では無かった。