Macのローカルで稀によく落ちるspecの原因調査の為に、csv絡みのrspecを走らせていたら、エラーが発生するようになってしまった。
An error occurred
Errno::EMFILE: Too many open files - getcwd
occurred at /foo/project_root/vendor/bundle/gems/rspec-core-2.99.2/lib/rspec/core/formatters/base_formatter.rb:208:in `expand_path'
Macのファイルディスクリプタの上限は、初期値では256しかないので、プロセスが取り扱うファイルが多くなるとエラーが発生してしまう。
% ulimit -n
256
その他の上限値も合わせて確認する場合は以下のコマンドでいける。
% launchctl limit
cpu unlimited unlimited
filesize unlimited unlimited
data unlimited unlimited
stack 8388608 67104768
core 0 unlimited
rss unlimited unlimited
memlock unlimited unlimited
maxproc 709 1064
maxfiles 256 unlimited
解決方法
limit -n で一時的に設定を変更する
% ulimit -n 1024
% ulimit -n
1024