http://www.zusaar.com/event/1687004
Java で Hugepage を使う方法を紹介します。
Hugepage は、非常に大きなメモリ空間を使用するDatabaseでのみ使用されると思われがちですが、Database の専用技術ではないため Java で使うことも出来ます。
昨今の Java VM では数十GB以上のメモリを使用する環境もよく見るようになりましたので、ひょっとすると Java + Hugepage という組み合わせを使う機会に遭遇するかもしれません。
それでは、どのようにして Hugepage を使用するのかを紹介します。
■Hugepageの設定を確認する
まずは、Hugepageを使う前にメモリの設定を見てみます。
[root@ol6u4]# cat /proc/meminfo | grep Huge
AnonHugePages: 235520 kB
HugePages_Total: 0HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
[root@ol6u4]# free
total used free shared buffers cached
Mem: 2054924 1731068 323856 0 50820 1114000
-/+ buffers/cache: 566248 1488676
Swap: 4128764 740 4128024
[root@ol6u4]# cat /proc/sys/kernel/shmmax
68719476736
メモリは323MB程空いており、Hugepageが使われていませんが十分なサイズの共有メモリが使用可能です。
また、Hugepageのサイズは2MBです。
十分なサイズの共有メモリが使えない場合はここでサイズを大きくしておきましょう。
[root@ol6u4]# echo 68719476736 > /proc/sys/kernel/shmmax
■Hugepageの設定をする
今回は、Hugepageを100ページ使用できるように設定します。
[root@ol6u4]# echo 100 > /proc/sys/vm/nr_hugepages
[root@ol6u4]# cat /proc/meminfo | grep Huge
AnonHugePages: 235520 kB
HugePages_Total: 100HugePages_Free: 100HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
[root@ol6u4]# free
total used free shared buffers cached
Mem: 2054924 1935844 119080 0 50908 1114024
-/+ buffers/cache: 770912 1284012
Swap: 4128764 740 4128024
Hugepageが100ページ使用できるようになりました。
メモリから200MB(2MB×100ページ)使用されたのが確認できます。
■Hugepageを使用してJavaを実行する
Java でHugepageを使うには-XX:+UseLargePagesオプションを付与して実行します。
java -Xmx64m -Xms64m -XX:+UseLargePages XXXX
Javaの実行中にHugepageが使われていることを確認します。
Freeのサイズが減っていることが確認できます。
[root@ol6u4]# cat /proc/meminfo | grep Huge
AnonHugePages: 237568 kB
HugePages_Total: 100
HugePages_Free: 86HugePages_Rsvd: 7
HugePages_Surp: 0
Hugepagesize: 2048 kB