2012-07-13 33 views
5

Tôi đang cố gắng để cấu hình GC trong một ứng dụng không Rails, tốt nhất là sử dụng YARV Ruby.Cách cấu hình bộ sưu tập rác trong Ruby

perftools.rb cho tôi biết rằng phần lớn thời gian CPU của tôi được chi tiêu trong garbage_collector (6061 (61,4%)).

Tôi cũng có thể nhận được số lượng đối tượng được tạo theo phương thức nào với perftools.rb. Một số phương thức tạo ra nhiều đối tượng hơn các đối tượng khác, nhưng nó không bị lệch.

Tôi nên đi đâu từ đây? Có thể nhận được thông tin chi tiết hơn về lý do tại sao chi tiêu quá nhiều thời gian để thực hiện GC không? Liệu có thể xem liệu thời gian đó có bị loại bỏ các đối tượng hay không hoặc liệu nó có được dùng để kiểm tra xem một đối tượng có nên được thu gom rác hay không?

Tôi có quyền truy cập OS X Lion, Windows 7 và Ubuntu 12.04.

Trả lời

1

Trên osx bạn có dtrace. Có các nhà cung cấp dtrace trong ruby ​​YARV.

Bạn có một vài tàu thăm dò liên quan đến GC mà bạn có thể sử dụng:

gc-bắt đầu gc-end gc-mark-bắt đầu gc-mark-end gc-quét-bắt đầu gc- sweep-end

Tôi nghĩ rằng họ có thể giúp tìm ra GC trong chương trình của bạn đang làm gì. xem tập tin này để xem cách sử dụng chúng: https://github.com/tenderlove/ruby/blob/probes/test/dtrace/test_gc.rb.

Và bài này để biết thêm giải thích: http://tenderlovemaking.com/2011/06/29/i-want-dtrace-probes-in-ruby.html

Có một lỗi mở trong ruby ​​http://bugs.ruby-lang.org/issues/2565 nơi bạn có thể tìm thấy một bản vá để áp dụng cho ruby ​​để có những thăm dò hoặc bạn có thể sử dụng https://github.com/tenderlove/ruby/tree/probes nơi vá đã được áp dụng.

Hy vọng điều này sẽ giúp