13

Tôi đang sử dụng GC.stat để sử dụng bộ nhớ hồ sơ trong ứng dụng Rails của chúng tôi. GC.stat trả về băm với các phím sau:Các trường của GC.stat của Ruby có nghĩa là gì?

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

Không ai biết chính xác những giá trị này có ý nghĩa gì? Không có tài liệu nào về chúng trong nguồn Ruby (gc.c), chỉ là một nhận xét: "Nội dung của hàm băm được xác định và có thể được thay đổi trong tương lai."

Một số trường này có ý nghĩa từ ngữ cảnh, ví dụ: count là số lượng heaps Ruby đã phân bổ. Nhưng heap_final_num là gì? heap_increment là gì? Là heap_length kích thước heap tối thiểu?

Tôi đang loay hoay với RUBY_MIN_HEAP_SLOTS, RUBY_FREE_MINRUBY_GC_MALLOC_LIMIT, nhưng thay đổi những VAR env dường như không có bất kỳ ảnh hưởng :heap_count hoặc :heap_length. Tôi hy vọng rằng :heap_count sẽ giảm xuống nếu tôi tăng các khe heap tối thiểu một cách triệt để. Vì vậy, tôi thực sự muốn biết chính xác những gì tất cả các giá trị GC.stat đại diện!

Tôi đang sử dụng Ruby 1.9.3.

Trả lời

12

:count - số chu kỳ gc, ví dụ: bao nhiêu lần đã chạy gc

:heap_used - số đống phân bổ, ruby ​​tạo ra một đống theo mặc định và tăng số đống nếu đó là không đủ để phân bổ tất cả các đối tượng

:heap_length - kích thước của heap. Đó là kích thước heap đầu tiên. Lý tưởng nhất là bạn nên có một đống sau khi kịch bản bắt đầu

:heap_increment - những con số đó sẽ được thêm vào kích thước heap cuối cùng nếu ruby ​​tạo đống mới

:heap_live_num - có bao nhiêu khe đống được phân bổ

:heap_free_num - làm thế nào nhiều khe đống được tự do

:heap_final_num - finalizers khe số

Bạn có phải là bằng cách tăng RUBY_MIN_HEAP_SLOTS số lượng heaps nên giảm xuống một. Nhưng cao hơn RUBY_FREE_MIN bạn sẽ nhận được nhiều heap hơn. Nó cho biết số lượng các khe trống hiện tại cần có, nếu số đó nhỏ hơn số bạn cung cấp - ruby ​​sẽ tạo ra đống mới. RUBY_GC_MALLOC_LIMIT liên quan nhiều hơn đến mức độ thường xuyên của ruby ​​sẽ chạy quy trình GC và không ảnh hưởng trực tiếp đến số lượng heap. Truy cập này cho biết sau bao nhiêu malloc ruby ​​sẽ chạy GC. Nhưng nó có thể được chạy thậm chí sớm hơn. Xin lưu ý rằng nó không phải là phân bổ oby ruby, đó là truy cập nội bộ ruby ​​nội bộ ruby ​​toàn cầu được tăng lên trên bất kỳ thông dịch viên ruby ​​nội bộ obj phân bổ.

+0

thông tin trong câu trả lời này không accurate..see [bài này] (http://samsaffron.com/archive/2013/11/22/demystifying-the-ruby-gc) để có câu trả lời đúng. – tihom

0

Có vẻ với tôi như : đếm là số 'quét lười biếng' chu kỳ GC, không đầy đủ GC chu kỳ trên Ruby MRI 1.9.3p448.

tôi phải buộc một GC đầy đủ trước khi các hồ sơ báo cáo bất kỳ sự kiện GC:

GC::Profiler.enable 
GC.start 
GC::Profiler.report 
Các vấn đề liên quan