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の時よりも上がったので一定の効果は有ったようだが本質的では無かった。