遠藤です。 2011年4月12日0:41 Takahiro Sunaga <sunagae / sunagae.net>: > 開発しているプロファイラについて宣伝させてください。 > > 現在リアルタイムで動作するRuby用実行時間プロファイラを開発しています。 > まだまだ不安定ではありますが、ある程度使用できるものになりましたので以下 > のページで公開しています。 > http://sunagae.net/software/llprof > > 既にRuby用のプロファイラとしてはprofileやruby-profなどがありますが、それ > らとは以下の点で異なっています。 > ・別ホストからリアルタイムにプロファイリングの監視ができる > ・コンテキストツリーをとってくるので、プログラムの文脈がより詳細に分かる > ・低いオーバーヘッド (ruby-profよりも低い) > > もしご興味があればご覧頂ければとおもいます。 公開ありがとうございます。 使ってみましたが、動くような動かないような……。 自分の書いたコードで重くて公開済みでパッと思いついたものとして http://d.hatena.ne.jp/ku-ma-me/20101224/p1 のコードを $ ruby -rrrprof quinemas2010.rb と動かしてみたところ、GUI で Root > Thread0 より先が展開できません でした。関係あるかわかりませんが java のコンソールにたまに下のような 例外が出てました。 Exception in thread "Timer-0" java.lang.NullPointerException at RRProf.Monitor.getProfileData(Monitor.java:160) at RRProf.MonitorGUI$ProfileTimer.run(MonitorGUI.java:141) at java.util.TimerThread.mainLoop(Timer.java:512) at java.util.TimerThread.run(Timer.java:462) 変なコードのせいで行番号とかでバグをついてたりしますかね。 手元にある非公開のプログラム 2 つ (こっちはまともなもの) でも試して みたところ、Thread0 の先まで展開できましたが、なぜか require が時間 を消費しまくっていることになってました。 どうも gem 関係の Class::load_specification とかいうメソッドで再帰 してるように見えたのですが、プログラム自体はちゃんと動いているので、 実際にそうはなってないと思うのですが。 まだ安定版しか試していないので、暇なときにさらに調べてみます。 あと、使いやすさの面で気になったことを 3 つ。 - ぜひ gem にしてほしいです。勝手にやっていいということなら勝手 にやります (誰かが) 。そういえば、ライセンスは? - GUI の接続先のホスト名がデフォルトで godel なのはともかく、 一度入力したら覚えてほしいです。 - 測定ごとに GUI を立ち上げ直すのが面倒です :-) -- Yusuke Endoh <mame / tsg.ne.jp>