NetBeans IDEの起動高速化メモ

先日twitterを眺めていると、NetBeans IDEのプロジェクトスキャンが重くて固まっちゃうと言うつぶやきに対して、userdirをRAMディスクに移すと解決しますよーと言うやり取りを捕捉し割り込んでみましたww。ちょうど、このtweetの数日前に同僚が同じ事象に悩んでいてNetBeansを諦めるかと言う話題なっていたので、早速試してみました。結果は非常に良好で数分かかっていた起動が十数秒程度まで短縮できました。[twitter:@kyon_mm]さん、[twitter:@akitsukada]さんありがとうございます!


折角やってみたので、その時のメモです。(何か間違っていたらご指摘ください!


環境は、WinXP(32bit)上にVMware Playerを入れて、そこにCentOS release 5.6(Final) (kernel-2.6.18-238.12.1.el5)とNetBeans IDE 7.0を突っ込んで試しました。NetBeansの導入等については割愛しますが、手元お試し用のPHP開発環境として構築されていました。


NetBeansのuserdirは7.0の場合デフォルトで、ホームディレクトリ下の.netbeans/7.0/にできています。ここは破壊したくなかったので、ホームディレクト下にnb_userdir_hogeと言うディレクトリを作ってバックアップに利用します。

$ mkdir /home/hoge/nb_userdir_hoge
$ cp -Rp /home/hoge/.netbeans/7.0/* /home/hoge/nb_userdir_hoge
$ ls /home/hoge/nb_userdir_hoge
  bin  build.properties  config  docs  modules  update_tracking  var
$ du -ha --max-depth=1 ./
  97M    nb_userdir_hoge


上記の通り、現在97M使用使用していますので、RAMディスクは一旦512M確保しました。もともとVMware Player上と言うこともあり、CentOSには768Mしかメモリを割り当てていなかったので、この作業前に1280Mまで確保量を増やしておきました。

$ sudo mkdir /mnt/ramdisk
$ sudo mount -t tmpfs -o size=512m /dev/shm /mnt/ramdisk
$ cp -Rp /home/hoge/nb_userdir_hoge /mnt/ramdisk/


上記の通り、RAMディスクの作成とデータのコピーを行いました。あとは、userdirの場所を変更してNetBeans IDEを思う存分利用するだけです。NetBeans IDEのインストールディレクトリ配下のetc/netbeans.confの1行目に、

netbeans_default_userdir="${HOME}/.netbeans/7.0"


と、あるのでこれを書き換えても良いですし、シンボリックリンクを貼るのも良いです。ただし、上記を直接絶対パスで書き換えてしまうと他のユーザーと共有することになるので、ユーザーごとに言語を分けたりしている場合にはおすすめできません。今回私の場合は、どうせ起動はGNOMEデスクトップ上のショートカットアイコンからになるので、ランチャの設定でコマンドを下記の通り書き換えました。

/opt/netbeans-7.0/bin/netbeans --userdir /mnt/ramdis/nb_userdir_hoge


さて、これで/mnt/ramdisk/nb_userdir_hogeをuserdirに指定して起動できるようになりましたが、RAMディスクはOSが終了するごとに消えてしまいますので、このデータの定期的な退避と、次回起動時にこの環境が再構築されるように設定します。

$ crontab -e
$ sudo vi /etc/rc.local
$ sudo vi /etc/rc6.d/S00killall
# crontabの設定 10分おきにRAMディスクをバックアップ
0-59/10 * * * * /usr/bin/rsync -ar --delete /mnt/ramdisk/nb_userdir_hoge/ /home/hoge/nb_userdir_hoge/
# rc.localの設定 RAMディスクの作成と前回保存状態の復元
/bin/mount -t tmpfs -o size=512m /dev/shm /mnt/ramdisk
/bin/cp -Rp /home/hoge/nb_userdir_hoge /mnt/ramdisk/
# rc6.d/S00killallの設定 終了前に最後のバックアップ
/usr/bin/rsync -ar --delete /mnt/ramdisk/nb_userdir_hoge/ /home/hoge/nb_userdir_hoge/