Ruby的GC.stat的字段是什么意思?

Ama*_*Pai 13 ruby garbage-collection memory-management memory-profiling

我正在使用GC.stat我们的Rails应用程序中的内存使用情况. GC.stat使用以下键返回哈希:

:count
:heap_used
:heap_length
:heap_increment
:heap_live_num
:heap_free_num
:heap_final_num
Run Code Online (Sandbox Code Playgroud)

有谁知道这些值究竟是什么意思?在Ruby源代码(gc.c)中没有关于它们的文档,只是注释:"哈希的内容是实现定义的,将来可能会更改."

其中一些字段从上下文中有意义,例如countRuby已分配的堆数.但是什么heap_final_num呢?什么是heap_increment?是heap_length最小堆大小?

我乱搞RUBY_MIN_HEAP_SLOTS,RUBY_FREE_MINRUBY_GC_MALLOC_LIMIT,但改变这些包膜增值经销商似乎不具有任何影响:heap_count:heap_length.:heap_count如果我从根本上增加最小堆插槽,我希望会下降.所以我真的想知道所有GC.stat值代表什么!

我正在使用Ruby 1.9.3.

Sig*_*urd 12

:count - gc循环的次数,例如gc运行的次数

:heap_used - 分配堆的数量,ruby默认创建一个堆,如果不足以分配所有对象,则增加堆数

:heap_length - 堆的大小.这是第一个堆大小.理想情况下,脚本启动后应该有一个堆

:heap_increment - 如果ruby创建新堆,将添加到最后一个堆大小的数字

:heap_live_num - 分配了多少个堆槽

:heap_free_num - 有多少堆插槽是免费的

:heap_final_num - 终结者插槽号码

你是对的,通过增加RUBY_MIN_HEAP_SLOTS堆的数量应减少到一个.但是越高RUBY_FREE_MIN越好.它表示当前堆应该具有的空闲插槽数,如果该数量小于您提供的数 - ruby​​创建新堆. RUBY_GC_MALLOC_LIMIT与ruby运行GC进程的频率有关,并且不会直接影响堆数.此计数器表示在ruby运行GC后会有多少mallocs.但它甚至可以更早地被破坏.请注意,它不是ruby obj分配,它是全局ruby内部malloc计数器,它在任何ruby解释器内部obj分配上递增.