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