From: KOSAKI Motohiro Date: 2013-08-20T02:04:52-04:00 Subject: [ruby-dev:47647] Re: [ruby-trunk - Bug #8711] 最近NoMemoryErrorが多い 2013/8/20 Tanaka Akira : > 2013年8月19日 15:42 KOSAKI Motohiro : > >>> 考えられる解決策: >>> - TestFiber#test_many_fibers を削除 >>> - TestFiber#test_many_fibers を別プロセスで実行 >>> - TestFiber#test_many_fibers 後にちゃんと物理メモリを解放するように頑張る >> >> システム全体で制限がかかっているので別プロセスで実行は本質的では >> ないように思います。 >> ちゃんと開放するようにテスト(と、GC)を変えて、そもそもシステムの >> メモリが小さすぎるときはテストをスキップするようにしないと、 >> 不思議な箇所でエラーを吐くと思います。 > > 別プロセスでテストを実行すれば、そのテストが要求したメモリは、 > そのプロセスが終了しさえすれば解放される、という話に思えるのですが、 > なにが問題なのでしょうか。 > > プロセスが終了しても影響が残る可能性を否定できないという話があるのでしょうか。 システム全体のリミットに引っかかった場合、死ぬのはrubyかもしれないし、 まったくrubyと関係ない別のプロセスかもしれない。誰がババを引くかは確定的には いえないのではないでしょうか。 テスト結果からす推測するに、今のささださんの環境ではruby以外に大量の アロケートするプロセスはいないようですが(そのため、Rubyだけがしきい値を超える可能性がある) 一般的には保証のない話だと思います。 さらにいうと、Fiberを使うとVMスタックがとんでもなく肥大化する(可能性がある)というのは 別にテスト環境以外でも発生しうる条件ですよね。