0

私のrails-projectの重要なライブラリクラスのプロファイルの使用法をテストしたいと思います。ActiveRecordを使用しているため、プロファイルを作成するにはすべてのRailsの依存関係が必要です。

私の知る限り、スクリプト/プロファイルとスクリプト/ベンチマークがメモリ使用量を追跡できるように、パッチを適用したルビー(rubygc)が必要です。この公式ガイドに従って、ruby 1.8.6(p399)と1.8.7(p248)のソースコードにパッチを適用しようとしましたが、どちらも次のメッセージで失敗します。

patching file gc.c
Hunk #2 succeeded at 50 with fuzz 2 (offset 2 lines).
Hunk #3 succeeded at 87 with fuzz 2 (offset 6 lines).
Hunk #4 succeeded at 153 with fuzz 1 (offset 45 lines).
Hunk #5 succeeded at 409 with fuzz 2 (offset 274 lines).
Hunk #6 FAILED at 462.
Hunk #7 FAILED at 506.
Hunk #8 FAILED at 520.
Hunk #9 FAILED at 745.
Hunk #10 FAILED at 754.
Hunk #11 FAILED at 923.
Hunk #12 succeeded at 711 (offset 46 lines).
Hunk #13 succeeded at 730 (offset 46 lines).
Hunk #14 succeeded at 766 (offset 55 lines).
Hunk #15 succeeded at 1428 (offset 87 lines).
Hunk #16 succeeded at 1492 (offset 89 lines).
Hunk #17 FAILED at 1541.
Hunk #18 FAILED at 1551.
Hunk #19 succeeded at 1571 (offset 91 lines).
Hunk #20 succeeded at 1592 (offset 91 lines).
Hunk #21 succeeded at 1601 (offset 91 lines).
Hunk #22 succeeded at 1826 (offset 108 lines).
Hunk #23 succeeded at 1843 (offset 108 lines).
Hunk #24 succeeded at 1926 (offset 108 lines).
Hunk #25 succeeded at 2118 (offset 108 lines).
Hunk #26 succeeded at 2563 (offset 100 lines).
Hunk #27 succeeded at 2611 with fuzz 1 (offset 102 lines).
Hunk #28 succeeded at 2628 (offset 102 lines).
8 out of 28 hunks FAILED -- saving rejects to file gc.c.rej
patching file intern.h
Hunk #1 succeeded at 268 (offset 15 lines).

また、ruby-profを使用しようとしましたが、常に「初期化されていない定数RubyProf::Test」というエラーが発生します。gemの「memory」の使い方がわからず、「memprof」も「bleak_house」も正常にインストールできませんでした。

パッチを当てたルビーを実行している場合は、問題ないはずです。しかし、ライブラリクラスのメモリをプロファイリングする他の可能性は大歓迎です。助けてくれてありがとう!

4

2 に答える 2

3

私もいつもruby-profでそのエラーが発生していました。profile_test_helper.rbにバグがあります。17行目を「require'ruby-prof/ test'」に変更すると、機能するはずです。

http://github.com/jeremy/ruby-prof/issues#issue/5

于 2010-04-24T17:30:54.457 に答える
0

Windowsを使用している場合は、RubyMemoryValidatorを試すことができます。

また、他のいくつかのAPIから派生したオリジナルのRuby MemoryTrackingAPIを試すこともできます。これはどのプラットフォームでも機能しますが、Rubyを自分でビルドする必要があります(C / C ++からAPIを自分で呼び出す必要があります)。

于 2010-04-15T10:16:47.770 に答える