fiberを使ったrubyプログラムでfiberに割り当てられたスタック領域を使い切ってプロセスが死ぬという問題が起こりました。
落ちた原因を調査していると、以下のようなコードが原因であることが分かりました。
big_array = [[:hoge 'fuga'], [:foo, 'bar'], ...] # 巨大な配列
Hash[*big_array.flatten]
Hash.[]
に引数として渡している配列が大きすぎるために、スタックを使い切ってしまっていたようです。
こちらの資料によると、スタックサイズは数十〜数百KBなので、それ以上のサイズの配列を引数に渡すとスタックが枯渇します。
http://www.atdot.net/~ko1/diary/edit_comment.cgi?mode=edit&year=2012&month=12&day=21
ruby 2.1以降ではArray#to_h
が実装されているので、そちらを使いましょう。