Using Drip with JRuby

Olle Jonsson edited this page Nov 15, 2017 · 4 revisions

Overview

drip is a command-line tool that can be used to dramatically lower perceived JVM startup time. It does this by preloading an entirely new JVM process/instance in the background and allowing you to simply use the preloaded environment. This can improve startup of JRuby-based applications significantly.

Install Drip

Install drip if you haven't already (see https://github.com/ninjudd/drip)

You can check out drip directly and build it, or use Homebrew on OS X.

brew update && brew install drip

Environment Setup

JRuby uses the JAVACMD environment variable (if present) as its executable (usually which java). drip uses the DRIP_INIT_CLASS environment variable to determine the main class to load. JRuby has a native Java class already setup for this purpose: org.jruby.main.DripMain.

export JAVACMD=`which drip`
export DRIP_INIT_CLASS=org.jruby.main.DripMain

On Drip versions earlier than 820f869 DRIP_INIT must be set.

export DRIP_INIT=""

Project Setup

Put any project-specific initialization code (Ruby code) in dripmain.rb in the current working directory. This file is automatically called by the special org.jruby.main.DripMain class when initializing the standby JVM process.

Rails Example:

# Rails project:
require_relative 'config/application'

# non-Rails Bundler-controlled project
require 'bundler/setup'
Bundler.require

rvm integration

If you would like to use drip automatically whenever you switch to JRuby with rvm, you will need to add a new hook file at $rvm_path/hooks/after_use_jruby_drip with the following content:

#!/usr/bin/env bash

if [[ "${rvm_ruby_string}" =~ "jruby" ]]
then
  export JAVACMD=`which drip`
  export DRIP_INIT_CLASS=org.jruby.main.DripMain
  
  # settings from: https://github.com/jruby/jruby/wiki/Improving-startup-time
  export JRUBY_OPTS="-J-XX:+TieredCompilation -J-XX:TieredStopAtLevel=1 -J-noverify" 
fi

Then you'll need to make that file executable:

chmod +x $rvm_path/hooks/after_use_jruby_drip

See also:

Clone this wiki locally
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.