簡體   English   中英

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

[英]What do the fields of Ruby's GC.stat mean?

我正在使用GC.stat來分析我們的Rails應用程序中的內存使用情況。 GC.stat返回帶有以下鍵的哈希:

:count
:heap_used
:heap_length
:heap_increment
:heap_live_num
:heap_free_num
:heap_final_num

有誰知道這些值究竟是什么意思? 在Ruby源代碼( gc.c )中沒有關於它們的文檔,只是注釋:“哈希的內容是實現定義的,將來可能會更改。”

其中一些字段從上下文中有意義,例如count是Ruby分配的堆數。 但是heap_final_numheap_final_num 什么是heap_increment heap_length是最小堆大小嗎?

我正在擺弄RUBY_MIN_HEAP_SLOTSRUBY_FREE_MINRUBY_GC_MALLOC_LIMIT ,但更改這些env變量似乎沒有任何影響:heap_count:heap_length 我希望:heap_count如果我從根本上增加最小堆插槽, :heap_count會下降。 所以我真的想知道所有GC.stat值代表什么!

我正在使用Ruby 1.9.3。

: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分配上遞增。

正確的環境變量名稱是RUBY_HEAP_MIN_SLOTS

https://github.com/ruby/ruby/blob/v1_9_3_194/gc.c#L441

它在我看來:count“懶惰掃描” GC周期的數量,而不是Ruby MRI 1.9.3p448上的完整GC周期。

在分析器報告任何GC事件之前,我不得不強制使用完整的GC:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM