ねら~ITエンジニア雑記

やきうのお兄ちゃんが綴るOracle Databaseメインのブログ

Java7 と Java5 で hugepage を 使う/使わない が異なる?

とりあえずメモ。hugepage使用の判定方法は yohei-aさんの記事

 【Linux で huge page を使っているプロセスを調べる方法:id:yohei-a:20140816:1408168458】

を参考。

Java7 の場合

[oracle@hostname1 javatest]$  /home/oracle/work/ayshibat/jdk1.7.0_51/bin/java -version
java version "1.7.0_51" ★Java7
Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)
[oracle@hostname1 javatest]$ ps -ef | grep -i java
:
★UseLargePagesオプション無し
oracle   26871  2552  1 01:38 pts/1    00:00:00 /home/oracle/work/ayshibat/jdk1.7.0_51/bin/java -Xmx64m -Xms64m HelloWorld 
oracle   26907 22419  0 01:38 pts/0    00:00:00 grep -i java

[oracle@hostname1 javatest]$ view /proc/26871/smaps
f6c00000-f8200000 rw-p 00000000 00:0b 2503962   /anon_hugepage (deleted)
Size:              22528 kB
:
KernelPageSize:     2048 kB ★hugepage を使ってるっぽい。
MMUPageSize:        2048 kB
:


Java5 の場合(※ORACLE_HOME配下の java で動かしてみた。)

[oracle@hostname1 javatest]$ /u01/app/oracle/product/11.2.0/dbhome_1/jdk/bin/java -version
java version "1.5.0_51" ★Java5
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_51-b10)
Java HotSpot(TM) 64-Bit Server VM (build 1.5.0_51-b10, mixed mode)
[oracle@hostname1 javatest]$ ps -ef | grep -i java
:
★UseLargePagesオプション無し
oracle   32732  2552  1 01:49 pts/1    00:00:00 /u01/app/oracle/product/11.2.0/dbhome_1/jdk/bin/java -Xmx64m -Xms64m HelloWorld 
oracle   32748 22419  0 01:50 pts/0    00:00:00 grep -i java
[oracle@hostname1 javatest]$ view /proc/32732/smaps
:
<「KernelPageSize: 2048 kB」 が見当たらない> ★hugepage は使ってない?
:


うーん?こいつは???(´・ω・`)

追記:jinfoってコマンドでUseLargePagesデフォルト値を確認できた。変わってるっぽい。

[oracle@hostname1 bin]$ ps -ef | grep -i HelloWorld
★UseLargePagesオプション無し
oracle   28067 22415  1 02:46 pts/0    00:00:00 /home/oracle/work/ayshibat/jdk1.7.0_51/bin/java -Xmx64m -Xms64m HelloWorld 
oracle   28111 24261  0 02:46 pts/1    00:00:00 grep -i HelloWorld
[oracle@hostname1 bin]$ ./jinfo -flag UseLargePages 28067 ★jinfoコマンドで確認
-XX:+UseLargePages ★UseLargePagesオプションが有効化されている。
[oracle@hostname1 bin]$


※更に追記java の「-XX:+PrintFlagsFinal」ってオプションでデフォルト値が確認できる。こっちの方が便利なんじゃ〜〜。

$ ./java -XX:+PrintFlagsFinal
[Global flags]
    uintx AdaptivePermSizeWeight                    = 20              {product}
    uintx AdaptiveSizeDecrementScaleFactor          = 4               {product}
:
     bool UseLargePages                             = true            {pd product} ★
:

■2017/11/15追記Java 1.7.0_60以降ではhugepage(UseLargePages)は
デフォルトで無効化されているようです。下記リンク参照ですやで彡(゚)(゚)

RFR:7191817:-XX:+UseSerialGC -XX:+UseLargePages crashes with SIGFPE on MacOS X
http://mail.openjdk.java.net/pipermail/hotspot-runtime-dev/2013-December/010370.html