Issue #10020 has been updated by Naohisa Goto. Related to Bug #10010: Error in TestEnv#test_memory_leak_* on Solaris added ---------------------------------------- Bug #10020: TestEnv#test_memory_leak_*, Fiddle::TestPointer#test_no_memory_leak, and Test_StringModifyExpand#test_modify_expand_memory_leak on Solaris https://bugs.ruby-lang.org/issues/10020#change-47660 * Author: Naohisa Goto * Status: Open * Priority: Normal * Assignee: * Category: * Target version: * ruby -v: ruby 2.2.0dev (2014-07-09) [sparc64-solaris2.10] * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN ---------------------------------------- Solaris 10 にて、以下のように memory leak 検出テストの Failure が出ます。(r46762 で確認) Solarisデフォルトのlibcのmallocでは、freeしてもOSにメモリを返さないのが原因と考えています。 メモリ関係デバッグ用のライブラリ libumem を使い、UMEM_OPTIONS=backend=mmap を指定すると、freeしたら直ちにOSにメモリを返すようになるようです。 dynamic link な実行プログラムなら、LD_PRELOAD=libumem.so UMEM_OPTIONS=backend=mmap をセットしてコマンドを実行ということになります。 test/ruby/envutil.rb の assert_no_memory_leak 内で invoke_ruby する際にこれらの環境変数をセットできればいいのですが、以下4点が課題と思います。 * 特定のOSに特異的な変更をどう入れるか? * これらの環境変数が元からセットされていた時の挙動 * static link のrubyの場合 * tcmalloc など、別の malloc をリンク指定されていた場合にどうなる? References: * http://stackoverflow.com/questions/346352/meaning-of-size-and-rss-values-in-prstat-output * http://docs.oracle.com/cd/E23824_01/html/821-1465/umem-free-3malloc.html ~~~ 51) Failure: TestEnv#test_memory_leak_shift [/XXXXX/test/ruby/test_env.rb:543]: [ruby-dev:48332] [Bug #9983]. size: 38502400 => 155942912. Expected 4.050212765957447 to be < 2.0. 52) Failure: TestEnv#test_memory_leak_aset [/XXXXX/test/ruby/test_env.rb:514]: [ruby-dev:48323] [Bug #9977]. size: 21725184 => 97222656. Expected 4.475113122171946 to be < 2.0. 53) Failure: Fiddle::TestPointer#test_no_memory_leak [/XXXXX/test/fiddle/test_pointer.rb:235]: rss: 8568832 => 12984320. Expected 1.5152963671128108 to be < 1.5. 55) Failure: Test_StringModifyExpand#test_modify_expand_memory_leak [/XXXXX/test/-ext-/string/test_modify_expand.rb:7]: rb_str_modify_expand(). size: 13303808 => 30179328. Expected 2.268472906403941 to be < 1.5. ~~~ -- https://bugs.ruby-lang.org/