12/22/2008

Ruby Memory Leak 巨大問題以及解決方式

Ruby Memory Leak 一向是一個難以解決的議題,不過在今年 11月12日的 Mailing List 裡面有人提出一個重要的問題, Ruby 的 callcc 在使用中產生相當明顯的 Memory Leak。後來有高手 Brent Roman 發表他的發現。他原本再 ARM CPU 上面開發他的 Ruby Robot 程式(Ruby 1.6.8),他的機器人上面只有 32 MB 的 Memory,不過他的 Ruby 程式一天就會吃掉 20MB 的 Memory,經過他的 hack ,現在他的 Ruby 程式已經穩定在 10MB 以下,他發現 Ruby Memory Leak 很大部分在於 pointer ,跟 callcc 的使用上,Javaeye 上面有對於這個問題的詳細中文翻譯


Matz 知道之後,相當鼓勵 Brent 將他的 Patch 放到 Ruby 上面,如今他的 Patch 終於發佈,他是根據 Ruby 1.8.7-p72 做的 Patch ,又由於他在 Monterey Bay Aquarium Research Institute工作,所以叫做 1.8.7-p72 MBARI Patch,目前處於 Alpha 版本。他發現經過他的 hack 之後,對於 Memory Leak 上有相當大的解決。根據他的用 Ruby 預設的 Test Case 的結果,他發現 Memory 消耗從 97MB 降低到 57 MB,JavaEye 也利用他們的程式做測試,Javeeye Fcgi Memory 消耗量從 129MB 降低為 99MB。


相當不錯的結果,期待納入 Ruby 1.8.7 的那一天。


沒有留言: