argius note

プログラミング関連

NailGun - 「めちゃくちゃ起動がはやい」

日本語の記事が少なかったからでしょうか、高速起動を調べていたときにはすでにあったはずなのに、見つけられなかったなんて。やっぱり英語の記事もちゃんと読まないとダメですね。


さてさて、この「NailGun」はJavaアプリを高速起動する方法「JRubyテク」(マイコミジャーナル)で紹介されたことで一躍有名になった(かも知れない)オープンソースソフトウェアです。
ネイティブプログラムのクライアントから常駐させたサーバプロセスにプログラム実行要求を出し、サーバプロセス上でプログラムを実行させることで、JVMプロセス起動時のオーバーヘッドを解消させることに成功しています。サーバプロセスのすべてのI/Oがクライアントとつながっているので、CUIを含む様々なJavaアプリケーションで利用できます。JRubyでは組み込みでサポートされているようです。


使い方は、Nailgun Quick Start(英語)に書いてありますが、簡単にまとめておきます。

サーバプロセスの起動

$ java -cp (クラスパス) com.martiansoftware.nailgun.NGServer

クラスパスにはnailgunのjarと実行させたいJavaアプリケーションのクラスパスを指定します。環境変数CLASSPATHに設定しても勿論OK。ServerVMが使えるなら"-server"オプションをつけてみるのも一興。
デフォルトポートは2113。変えたい場合はサーバ起動時の第1引数にポート番号を指定し、クライアントでは"--nailgun-port"で指定。IPアドレスの指定もできます(説明は割愛)。

# 例:ポート9981でサーバを起動する
$ java -cp (クラスパス) com.martiansoftware.nailgun.NGServer 9981
$ ng --nailgun-port 9981 (FQCN)

クライアントの操作

ng.exeにパスを通しておきます。

$ ng (mainクラスのFQCN)

その他

カレントディレクトリはサーバプロセスの起動ディレクトリになることに注意。

まとめをJavaアプリケーションの高速起動(2) NailGun (@argius.net-wiki)に書いています。今後分かったことなどはこちらに追加します。