Child pages
  • Ramdisk Java
Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 20 Current »

Introduction

Putting a JVM in a read only ramdisk file system improve the overall performance of Java on Ubuntu Linux.

It doesn't replace a SSD but rooming 200M of RAM to get some substantial performance is always welcome.

However there are some limitations with this technic:

  • tmpfs is swappable. Under heavy loaded machine our ramdisk could be transferred in a mechanical hard drive.
  • SquashFS is building a highly compressed file, reducing the IO and the size of the ramdisk. Not sure if an unsquashed JVM image would outperform a squashed image.

SquashFS

In order to put a JVM in a RAM disk we are going to use the tool SquashFS.

Use the following command to install the Squash FS tools.

sudo apt-get update
sudo apt-get install squashfs-tools

Make a squashfs file out of your desired JVM, use LZMA2 compression rather than gzip.

cd /usr/lib/jvm
sudo mkdir ramdisk
mksquashfs /usr/lib/jvm/java-8-oracle /usr/lib/jvm/ramdisk/java-1.8.0.91-oracle.sqsh -comp xz

At this point you have an existing JVM squashed in .sqsh file with a roughly size of 160M:

user@machine:/media$ ls --block-size=M -al /usr/lib/jvm/ramdisk/java-1.8.0.91-oracle.sqsh 
-rw-r--r-- 1 user users 160M May 12 15:53 /usr/lib/jvm/ramdisk/java-1.8.0.91-oracle.sqsh

Mount Point

Create a mountpoint for the ramdisk:

sudo mkdir /media/ramdisk-java-8-oracle

Edit your /etc/fstab, define your mount point as a tmpfs file system and run your squashed JVM against this mount point by adding the following declarations:

# define a tmps mount point for Java ramdisk
tmpfs /media/ramdisk-java-8-oracle tmpfs defaults,size=170M,mode=1777 0 0
# run a squashed JVM against our tmps mount point
/usr/lib/jvm/ramdisk/java-1.8.0.91-oracle.sqsh /media/ramdisk-java-8-oracle squashfs ro,defaults,loop 0 0

Installation

At this point you need to reboot to initialize the ramdisk with your Squashed JVM. Now you to proceed a standard Java installation.

  • Check your Java environment
  • Define a jinfo file
  • Prepare a bunch of shell scripts to install and uninstall your new JVM.

in the /usr/lib/jvm directory we define the default-java to point to a local symlink who will point to our ramdisk:

user@machine:/usr/lib/jvm$ ls -al
total 92
drwxr-xr-x 7 root root 4096 Jul 13 13:40 .
drwxr-xr-x 205 root root 53248 Jul 13 09:22 ..
lrwxrwxrwx 1 root root 34 Jul 7 15:33 default-java -> /usr/lib/jvm/ramdisk-java-8-oracle
lrwxrwxrwx 1 root root 28 Jul 13 12:15 .default-java.jinfo -> .ramdisk-java-8-oracle.jinfo
lrwxrwxrwx 1 root root 20 Jul 7 11:46 ramdisk-java-8-oracle -> /media/ramdisk-java-8-oracle
-rw-r--r-- 1 root root 3569 Jul 13 10:24 .ramdisk-java-8-oracle.jinfo

We create a .ramdisk-java-oracle.jinfo with a unique priority id:

name=ramdisk-java-8-oracle
priority=1073
section=main
jre ControlPanel /usr/lib/jvm/ramdisk-java-8-oracle/jre/bin/ControlPanel
jre java /usr/lib/jvm/ramdisk-java-8-oracle/jre/bin/java
jre javaws /usr/lib/jvm/ramdisk-java-8-oracle/jre/bin/javaws
jre jcontrol /usr/lib/jvm/ramdisk-java-8-oracle/jre/bin/jcontrol
jre jjs /usr/lib/jvm/ramdisk-java-8-oracle/jre/bin/jjs
jre keytool /usr/lib/jvm/ramdisk-java-8-oracle/jre/bin/keytool
jre orbd /usr/lib/jvm/ramdisk-java-8-oracle/jre/bin/orbd
jre pack200 /usr/lib/jvm/ramdisk-java-8-oracle/jre/bin/pack200
jre policytool /usr/lib/jvm/ramdisk-java-8-oracle/jre/bin/policytool
jre rmid /usr/lib/jvm/ramdisk-java-8-oracle/jre/bin/rmid
jre rmiregistry /usr/lib/jvm/ramdisk-java-8-oracle/jre/bin/rmiregistry
jre servertool /usr/lib/jvm/ramdisk-java-8-oracle/jre/bin/servertool
jre tnameserv /usr/lib/jvm/ramdisk-java-8-oracle/jre/bin/tnameserv
jre unpack200 /usr/lib/jvm/ramdisk-java-8-oracle/jre/bin/unpack200
jre jexec /usr/lib/jvm/ramdisk-java-8-oracle/jre/lib/jexec
jdk appletviewer /usr/lib/jvm/ramdisk-java-8-oracle/bin/appletviewer
jdk extcheck /usr/lib/jvm/ramdisk-java-8-oracle/bin/extcheck
jdk idlj /usr/lib/jvm/ramdisk-java-8-oracle/bin/idlj
jdk jar /usr/lib/jvm/ramdisk-java-8-oracle/bin/jar
jdk jarsigner /usr/lib/jvm/ramdisk-java-8-oracle/bin/jarsigner
jdk javac /usr/lib/jvm/ramdisk-java-8-oracle/bin/javac
jdk javadoc /usr/lib/jvm/ramdisk-java-8-oracle/bin/javadoc
jdk javafxpackager /usr/lib/jvm/ramdisk-java-8-oracle/bin/javafxpackager
jdk javah /usr/lib/jvm/ramdisk-java-8-oracle/bin/javah
jdk javap /usr/lib/jvm/ramdisk-java-8-oracle/bin/javap
jdk javapackager /usr/lib/jvm/ramdisk-java-8-oracle/bin/javapackager
jdk jcmd /usr/lib/jvm/ramdisk-java-8-oracle/bin/jcmd
jdk jconsole /usr/lib/jvm/ramdisk-java-8-oracle/bin/jconsole
jdk jdb /usr/lib/jvm/ramdisk-java-8-oracle/bin/jdb
jdk jdeps /usr/lib/jvm/ramdisk-java-8-oracle/bin/jdeps
jdk jhat /usr/lib/jvm/ramdisk-java-8-oracle/bin/jhat
jdk jinfo /usr/lib/jvm/ramdisk-java-8-oracle/bin/jinfo
jdk jmap /usr/lib/jvm/ramdisk-java-8-oracle/bin/jmap
jdk jmc /usr/lib/jvm/ramdisk-java-8-oracle/bin/jmc
jdk jps /usr/lib/jvm/ramdisk-java-8-oracle/bin/jps
jdk jrunscript /usr/lib/jvm/ramdisk-java-8-oracle/bin/jrunscript
jdk jsadebugd /usr/lib/jvm/ramdisk-java-8-oracle/bin/jsadebugd
jdk jstack /usr/lib/jvm/ramdisk-java-8-oracle/bin/jstack
jdk jstat /usr/lib/jvm/ramdisk-java-8-oracle/bin/jstat
jdk jstatd /usr/lib/jvm/ramdisk-java-8-oracle/bin/jstatd
jdk jvisualvm /usr/lib/jvm/ramdisk-java-8-oracle/bin/jvisualvm
jdk native2ascii /usr/lib/jvm/ramdisk-java-8-oracle/bin/native2ascii
jdk rmic /usr/lib/jvm/ramdisk-java-8-oracle/bin/rmic
jdk schemagen /usr/lib/jvm/ramdisk-java-8-oracle/bin/schemagen
jdk serialver /usr/lib/jvm/ramdisk-java-8-oracle/bin/serialver
jdk wsgen /usr/lib/jvm/ramdisk-java-8-oracle/bin/wsgen
jdk wsimport /usr/lib/jvm/ramdisk-java-8-oracle/bin/wsimport
jdk xjc /usr/lib/jvm/ramdisk-java-8-oracle/bin/xjc
#plugin xulrunner-1.9-javaplugin.so /usr/lib/jvm/ramdisk-java-8-oracle/jre/lib/i386/libnpjp2.so
plugin firefox-javaplugin.so /usr/lib/jvm/ramdisk-java-8-oracle/jre/lib/i386/libnpjp2.so
#plugin iceape-javaplugin.so /usr/lib/jvm/ramdisk-java-8-oracle/jre/lib/i386/libnpjp2.so
#plugin iceweasel-javaplugin.so /usr/lib/jvm/ramdisk-java-8-oracle/jre/lib/i386/libnpjp2.so
#plugin mozilla-javaplugin.so /usr/lib/jvm/ramdisk-java-8-oracle/jre/lib/i386/libnpjp2.so
#plugin midbrowser-javaplugin.so /usr/lib/jvm/ramdisk-java-8-oracle/jre/lib/i386/libnpjp2.so
#plugin xulrunner-javaplugin.so /usr/lib/jvm/ramdisk-java-8-oracle/jre/lib/i386/libnpjp2.so

Link the .default-java.jinfo with .ramdisk-java-oracle.jinfo.

Then we create a bunch of install and remove shell scripts to update-alternatives either the default-java and the ramdisk-java-8-oracle.

First we update-alternatives ramdisk-java-8-oracle then default-java and finally update-java-alternatives our default-java.




  • No labels