2010年12月30日木曜日
2010年7月25日日曜日
Eclipse Memory AnalyzerでRubyアプリケーションのメモリリークを検知する
原文: チャールズ=オリバー=ナター
前回の記事「JRubyでメモリを観察するには」の後、何人かの人からEclipse MATのJRubyでの使い方について書いてみたらどうかとの意見を貰いました。これを早速取り上げる事にします。
2010年7月24日土曜日
JRubyのメモリを観察するには
Ruby言語の各実装において、どんなメモリ消費を解析するツールがあるのかが近頃ちょっとした話題になっています。 それもその筈、Rubyで書かれたアプリケーションの(不具合の調査は言うに及ばず)メモリ消費の具合を詳しく調べるのは容易い事ではありません。 JRubyを使わないのなら、そうです。
JRubyはJVM上で走るので、JVM向けに作られた何十ものツールの恩恵に授かる事が出来ます。 中にはJDKに同梱されているものを含め、メモリの調査、解析、レポートをするものもあります。 ヒープダンプが欲しければ、Hotspot系のJVM(SunまたはOpenJDK)に含まれるjmapやjhatが使えます。 もっと高度なツールが欲しければ、Eclipseを基にしたMemory Analysis Tool、 メモリ及びCPU性能解析ツールであるYourKit、 今ではHotspotに含まれているJavaVMを始め、 数多くの選択肢があります。 こうした数多くのツールのお陰でメモリの調査には事欠きません。
本稿では実際にこのうちの二つのツールをどの様に使いこなすか見ていく事にします。 取り上げたツールは起動中のJVMを観察するグラフィカルなツールであるVisualVMと、 ヒープをダンプして事後解析を可能にするjmapとjhatのタッグチームです。
2010年6月17日木曜日
2010年6月15日火曜日
2010年5月12日水曜日
JRuby 1.5.0 リリースのお知らせ
JRuby バージョン1.5.0
JRubyのバージョン1.5.0 のリリースを発表いたします。
ホームページ: http://www.jruby.org/
ダウンロード: http://www.jruby.org/download
今まで最長のリリース期間(凡そ五ヶ月)を経た今回のリリースは不具合の修正の数も最多になりました。加えて、以下に示す通り、多くの新しい機能も含んでいます。不具合の内訳としてはRubyのメソッドの細かい仕様の修正が殆どです。その点から申しますと、JRuby 1.4.0から1.5.0へのアップグレードは容易でしょう。また、「JRubyから暫く遠ざかっていた」と仰るあなたも、この機会に是非JRubyを今一度試してみて下さい。
2010年5月4日火曜日
JRuby 1.5.0.RC3 がリリースされました。
JRuby 1.5.0.RC3 のリリースをお知らせします。
ホームページ: http://www.jruby.org/
ダウンロード: http://www.jruby.org/download
RC2以降に修正されたバグを以下に示します。
- JRUBY-3742: Java native threads are not added to ThreadService.rubyThreadMap after being adopted.
- JRUBY-4264: threadContextMap leaks RubyThread on death of adopted thread
2010年4月28日水曜日
JRuby 1.5.0.RC2 がリリースされました。
JRuby 1.5.0.RC2 のリリースをお知らせします。恐らくこれが最後のRCになると思われます。
ホームページ: http://www.jruby.org/
ダウンロード: http://www.jruby.org/download
RC1のリリース以降に修正されたバグを以下に示します。
- JRUBY-3153: IO rubyspec failures under IBM JDK6 Linux
- JRUBY-3208: ant task api-docs runs out of memory, patch included
- JRUBY-4677: Java exceptions can't be rescued with "rescue Exception"
- JRUBY-4680: jirb_swing broken: JRuby picking wrong constructor, with no obvious work around
- JRUBY-4704: "Java wrapper with no contents" error when subclassing a Runnable class in JRuby
- JRUBY-4710: Problems importing classes in default package
- JRUBY-4715: FFI::StructByValue missing layout and struct_class methods.
- JRUBY-4721: FFI::Platform::CONF_DIR looks in wrong location for PPC Macs.
- JRUBY-4724: Java class equality operator is order dependent
- JRUBY-4725: to_java_object no longer exists
- JRUBY-4729: System properties to set bindir and default rubygems paths
- JRUBY-4730: Unix jruby-1.5.0.RC1 distro includes rubygems/default/jruby_native.rb without native launcher
- JRUBY-4731: Mismatched default compilation prefix
- JRUBY-4733: Allow compilation of Ruby files for a specificic JVM version
- JRUBY-4734: Reduce "multiple Java method" warnings in unambiguous cases
- JRUBY-4735: install-gems ant target should not count on successful installation of jruby-launcher
- JRUBY-4737: Compatibility issue with Spring property from 1.4.0 to 1.5.0.RC1
- JRUBY-4738: test/testapp/testapp.exe appears twice in jruby-src-1.5.0.RC1.tar.gz
- JRUBY-4742: File::Stat throws a NPE when it doesn't find a file into a jar
- JRUBY-4747: read_nonblock error with couchrest
- JRUBY-4749: require 'rbconfig' fails on GAE because of NullPointerException
- JRUBY-4750: ant-to-rake:
task does not work when classpath is defined via taskdef's attribute - JRUBY-4751: Java call to RubyBignum.to_s() returns generic object representation
- JRUBY-4754: NotImplementedError: the MD5() function is unimplemented on this machine
- JRUBY-4757: addressable gem doesn't work with --fast
- JRUBY-4760: File.open throws Errno::ENOENT when file inside jar is accessed using ".." (doubledot) in the path
- JRUBY-4761: 1.9.2: Thread#backtrace
2010年4月15日木曜日
JRubyのバージョン1.5.0.RC1がリリースされました
JRuby バージョン1.5.0.RC1
JRubyのバージョン1.5.0.RC1を発表いたします。
ホームページ: http://www.jruby.org/
ダウンロード: http://www.jruby.org/download
今まで最長のリリース期間(凡そ五ヶ月)を経た今回のリリースは不具合の修正の数も最多になりました。加えて、以下に示す通り、多くの新しい機能も含んでいます。不具合の内訳としてはRubyのメソッドの細かい仕様の修正が殆どです。その点から申しますと、JRuby 1.4.0から1.5.0.RC1へのアップグレードは容易でしょう。また、「JRubyから暫く遠ざかっていた」と仰るあなたも、この機会に是非JRubyを今一度試してみて下さい。以前あった不具合が解消されている可能性大です。1.5.0の正規リリースをより良い物にする為にどうぞご協力下さい。
2010年3月3日水曜日
JRubyの起動時間についてのヒント
JRubyはRuby言語の実装の中では一際起動が遅い事で悪名高くなってしまいました。一部は、JITの生成品がなくてブートストラップして動き出すまでに時間がかかってしまうJVMを使っているせいです。起動の際のボトルネックが報告されて原因が解明されればそれを除く努力を我々はしていますが、JRuby自体にも問題があります。起動の問題は、実は簡単な設定問題である事もしばしばです。JRubyの起動を早くするコツを幾つか見ていきましょう。
注意。JRuby自体の起動は、他のJVM言語に較べると結構いい線いっていますが、MatzのRuby(一般的には最も速い実装とは言えない)の起動は素晴らしく早いです。
クライアント用のJVMを使う
これが何と言っても一番手っ取り早い方法です。OpenJDKとSunのJDKを動かしているJVMであるHotSpotには、「クライアント用」と「サーバ用」の二種類のバックエンドがあります。「クライアント用」はバイトコードをコンパイルする時、最適化は最小限に、始めのうちにササッとやってしまうだけです。一方、「サーバ用」は大規模にしかも全体的に最適化をする訳ですが、これが出来るようになる時点に到着するには長い時間が掛かりますし、最適化の為には多くのリソースが必要です。
2010年2月24日水曜日
JRubyとRails 3を仲良くさせる方法
概要
jruby -S rails newapp -m http://jruby.org/rails3.rb
Rails 3のアプリを生成する際にはJRuby専用のテンプレート(-m http://jruby.org/rails3.rb
)を使用して下さい。
2010年2月23日火曜日
RakeとAntを一緒に
JRuby 1.5リリースに含まれる新しいライブラリをレポジトリーに先日コミットしました。これについて述べる前にこの下にでている写真を見て色々と思いを巡らして下さい。そう!私たち皆の模範となるミスター・ポテトヘッドです。ミスター・ポテトヘッドは私たちを数時間に渡って楽しませる(少なくともおそらく楽しませてくれていたであろう)、柔軟なただのオモチャではなくて、澱粉質を多く含む食べ物でもあるのです。

ミスター・ポテトヘッド
(MyMollyPopさんの写真)
ちょっとトンチンカンな事を言っているな、と思う前にちょっと考えてみて下さい。実際のところ、私たちがプログラマとして日常やっているのは、ミスター・ポテトヘッドを造り上げているようなものではないですか。ソフトウェアを造り上げるという問題に私たちが直面した時、求められているのは、さまざまな部品をくっつけるだけではなく、部品を最も綺麗に組み合わせる事です。ソフトウェアデザインとは正しくジャガイモを飾り付けるようなものです。この記事の「ジャガイモ」はソフトウェアです。
2010年1月10日日曜日
大忙しの一週間。アンドロイド、Maven、Rake、C拡張、そして…
(最後のブログ記事からどれ位経ったでしょうか?正解は「長い間」。カンファレンス続きで大忙しだった秋が終ったので、もっとブログを書くつもりです。これからは、一月に三つも会議に出かけないように忠告して下さい。)
やあ!この一週間はとても忙しかったです。でも、僕らは元気でせっせとコード書いてるって解るように、JRubyで何が起こってるかを見ていきましょう。
アンドロイド
今週の頭にJan Berkelの手伝いをやってRuboto IRBを最新のアンドロイド携帯環境で走らせる事に成功しました。細かい手直しが二つ三つ必要だったのと、Janが手伝うのに興味があるというので、この変更を追加して彼をRubotoのコミッタに追加しました。
Ruboto IRBのレポジトリはこちら→http://github.com/headius/ruboto-irb
最近、アンドロイド上で動くJRubyに対する私の興味が増してきました。極最近の事ですが、JRubyはJVMで動くメジャーな言語の内ではアンドロイド携帯で動いている間に新規のコードを作って動かす事が出来る凡そ唯一の言語なのだと思い至ったんです。GroovyやScalaやClojureでは双方向型のシェルを造るのは不可能。というのも、これらの言語はソースコードを一旦JVMのバイトコードにコンパイルする必要があって、JVMのバイトコードはDalvikのVMでは直接には動かないからです。