Ruby';是什么意思?

Ruby';是什么意思?,ruby,memory-management,garbage-collection,memory-profiling,Ruby,Memory Management,Garbage Collection,Memory Profiling,我正在使用GC.stat分析Rails应用程序中的内存使用情况GC.stat返回具有以下键的哈希: :count :heap_used :heap_length :heap_increment :heap_live_num :heap_free_num :heap_final_num 有人知道这些值的确切含义吗?Ruby source()中没有关于它们的文档,只有一条注释:“散列的内容是实现定义的,将来可能会更改。” 其中一些字段从上下文中是有意义的,例如,count是Ruby分配的堆数。但是

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

:count
:heap_used
:heap_length
:heap_increment
:heap_live_num
:heap_free_num
:heap_final_num
有人知道这些值的确切含义吗?Ruby source()中没有关于它们的文档,只有一条注释:“散列的内容是实现定义的,将来可能会更改。”

其中一些字段从上下文中是有意义的,例如,
count
是Ruby分配的堆数。但是什么是
heap\u final\u num
?什么是堆增量?
heap\u length
是最小堆大小吗

我正在摆弄
RUBY\u MIN\u HEAP\u slot
RUBY\u FREE\u MIN
RUBY\u GC\u MALLOC\u LIMIT
,但更改这些环境变量似乎对
:HEAP\u count
:HEAP\u length
没有任何影响。如果我从根本上增加最小堆槽,我希望
:heap\u count
会下降。所以我真的很想知道所有的
GC.stat
值到底代表什么


我使用的是Ruby 1.9.3。

:count
-gc循环的数量,例如gc运行了多少次

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

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

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

:heap\u live\u num
-分配了多少堆插槽

:heap\u free\u num
-有多少堆插槽可用

:heap\u final\u num
-终结器插槽编号

您是对的,通过增加
RUBY\u MIN\u HEAP\u slot
堆的数量应该减少到一个。但是
RUBY\u FREE\u MIN
越高,您得到的堆就越多。它指示当前堆应该具有的空闲插槽的数量,如果该数量小于您提供的数量-ruby创建新堆。
RUBY\u GC\u MALLOC\u LIMIT
更多地与RUBY运行GC进程的频率有关,并且不会直接影响堆数。此计数器指示ruby运行GC的mallocs数。但它可以运行得更早。请注意,这不是ruby obj分配,而是在任何ruby解释器内部obj分配上递增的全局ruby内部malloc计数器。

正确的环境变量名称是
ruby\u HEAP\u MIN\u SLOTS


在我看来像:count是Ruby MRI 1.9.3p448上的“惰性扫描”GC周期数,而不是完整GC周期数

在探查器报告任何GC事件之前,我必须强制执行完整GC:

GC::Profiler.enable
GC.start
GC::Profiler.report

此答案中的信息不准确..有关正确答案,请参阅。