tokuhirom's Blog

Server::Starter から簡単に Java プロセスを起動できるようになった

JVM には inetd から起動するときのために、file descriptor 0 をソケットとして開く機能がついている。Jetty 等もこの機能に対応しているので、簡単に利用できる。

file descriptor を 0 に固定出来る機能が Server::Starter にあればよかろうということで、以下のような指定で起動できるように実装した。

$ start_server --port=20000=0 java EchoServer

この機能により、Java も LL と同様な形態でアプリケーションを運用することが可能となる。

Java では昔から ClassLoader 機構を利用することによりホットデプロイを行うことが可能だが、リソースの解放が漏れるなど開発時の難しさが指摘されている。

Server::Starter 方式では JVM のプロセスごと死ぬので、綺麗な状態で都度起動できる。 得に Embedded Jetty 等をベースにした Spring Boot や Dropwizard のようなものの場合には、都度終了させる運用が多くなるとおもうのでこのような方式はなかなか便利なのではないか。

制限