#chiroito ’s blog

Java を中心とした趣味の技術について

Java で Hugepage を使用する

JPOUG Advent Calendar 2013 の 12月12日のエントリです。
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