読者です 読者をやめる 読者になる 読者になる

drip

https://github.com/flatland/drip

JVMのプロセスをプールすることによって見かけ上のVM起動をはやくしてくれるもの。起動したJVMclasspathとVM引数毎にハッシュであれして個別に管理する。似たようなものよりはいけてるらしいけど、似たようなものをよく知らないのでそれと比較してどこがよいのかは(READMEに書いてあるけど)よくわからない。とりあえずdirtyになりづらいらしい。


対応している(というかインストラクションがある)のは、Clojure/Scala/JRuby/Mavenで、 https://github.com/flatland/drip/wiki このへんのドキュメントを参照すればどうにかできる。dripそのもののインストールは、homebrew/macを使用しているなら brew install drip でよい。

導入について、drop-in replacementな仕組みで、ようするにJAVACMDという環境変数の設定値を(使用しているプロダクトについては)javaからdirpに差し替えるとこの見かけ上の起動の高速化の恩恵が受けられる。ただ、結局JVMのプロセスをプールしているだけなので、たとえばscalaのreplを起動するときには起動後の処理もあると思われるので、超速くなるというほど超速くなるというわけではない。でも大体半分くらいにはなるので、VMの起動がストレスに感じられる人にはよいと思う。個人的には体感でわかる位の差にはなるので、興味のある人は試して見るとよいと思う。

実測値は以下のような感じ。半分というほどでもないけど、900ms→650msくらい。初回はプールがないので、1000msくらいはかかる。

marbleair:sources marblejenka$ export JAVACMD=java
marbleair:sources marblejenka$ time scala -e 'Console println 10 * 10'
100

real 0m0.917s
user 0m0.751s
sys 0m0.079s
marbleair:sources marblejenka$ time scala -e 'Console println 10 * 10'
100

real 0m0.908s
user 0m0.759s
sys 0m0.078s
marbleair:sources marblejenka$ time scala -e 'Console println 10 * 10'
100

real 0m0.882s
user 0m0.725s
sys 0m0.079s
marbleair:sources marblejenka$ time scala -e 'Console println 10 * 10'
100

real 0m0.987s
user 0m0.813s
sys 0m0.095s
marbleair:sources marblejenka$ time scala -e 'Console println 10 * 10'
100

real 0m0.909s
user 0m0.735s
sys 0m0.079s
marbleair:sources marblejenka$ export JAVACMD=drip
marbleair:sources marblejenka$ drip kill
marbleair:sources marblejenka$ time scala -e 'Console println 10 * 10'
100

real 0m1.099s
user 0m0.910s
sys 0m0.118s
marbleair:sources marblejenka$ time scala -e 'Console println 10 * 10'
100

real 0m0.633s
user 0m0.065s
sys 0m0.081s
marbleair:sources marblejenka$ time scala -e 'Console println 10 * 10'
100

real 0m0.649s
user 0m0.066s
sys 0m0.083s
marbleair:sources marblejenka$ time scala -e 'Console println 10 * 10'
100

real 0m0.632s
user 0m0.072s
sys 0m0.096s
marbleair:sources marblejenka$ time scala -e 'Console println 10 * 10'
100

real 0m0.711s
user 0m0.074s
sys 0m0.095s
marbleair:sources marblejenka$ time scala -e 'Console println 10 * 10'
100

real 0m0.623s
user 0m0.067s
sys 0m0.081s

HadoopコマンドもいちいちJVMをあれするのでうまく組み合わせられないか検討しましたが、いまいちうまくいかない感じでした。

453c453,454< _JAVA_EXEC="su $_HADOOP_DAEMON_USER -s $JAVA --"

    • -

> # _JAVA_EXEC="su $_HADOOP_DAEMON_USER -s $JAVA --"
> _JAVA_EXEC="su $_HADOOP_DAEMON_USER -s /usr/local/bin/drip --"
455c456,457< _JAVA_EXEC="$JAVA"

    • -

> # _JAVA_EXEC="$JAVA"
> _JAVA_EXEC="/usr/local/bin/drip"

こんなんでbin/hadoopをかえればいいんじゃないかとおもったけどあかんかった。