最近看到的「Fullstaq Ruby」,專為線上環境最佳化的 Ruby:
Fullstaq Ruby is an MRI-based Ruby distribution that's optimized for server production use cases.
目前主要是使用 jemalloc (超萬用) 以及 malloc_trim patch:
It is compiled with the Jemalloc and malloc_trim patches, allowing lower memory usage and higher performance.
其中看了一下 malloc_trim patch 的介紹還蠻有趣的:「What causes Ruby memory bloat?」,這篇主要是在討論記憶體用量的問題,以及目前常見的 workaround。
這個 patch 是針對 Ruby 在 full mark GC 的情境後,增加呼叫 malloc_trim(0);
以釋放記憶體,作者發現這樣可以省下了大量的記憶體空間:
然後作者預期效能應該會有影響 (畢竟多做了一些事情),所以找了有在做 Rails benchmark 的人幫忙測試,結果發現反而變快了:
這樣看起來有可能官方會考慮把這個 patch 直接包進去?不過這看起來是在使用 jemalloc 的前提下?不知道如果使用標準的 glibc 會怎麼樣...