JVM備忘録

jmap

  • jmap -dump:format=b,file=heap.bin [JAVA_PID]
  • jmap -histo:live
  • sudo /usr/java/java/bin/jmap -permstat [JAVA_PID]

jcmd

  • jcmd GC.heap_dump
    • Full GC してからダンプ
  • jcmd GC.run

Add -XX:+UnlockDiagnosticVMOptions to your JVM options, then capture GC.class_stats with jcmd at a metaspace peak:

  • jcmd GC.class_stats -all -csv > class_stats.csv

JVM option

-Xms4G -Xmx4G -XX:MaxPermSize=256m -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -verbose:gc -Xloggc:gc.log

GC ログ ツール

JVMオプションのデフォルト値

java -XX:+PrintFlagsFinal -version

jpsjstack

jps | awk '{if ($2 == "jboss-modules.jar") {print $1}}' | xargs jstack

IBM JDK

Snap Trace

/opt/IBM/WebSphere/AppServer/java/bin/java com.ibm.jvm.format.TraceFormat Snap.20160225.111111.1111.0001.trc

hashCode

JDK 8 からデフォルトが -XX:hashCode=5 になった http://d.hatena.ne.jp/chiheisen/20140706/1405767267 これにより、JVM を再起動した時に比較的変化しない hashCode が得られる(ように見える)

hashCode の乱数性に関わるバグを再現しやすくしたい場合、このオプションをつける(ただし付けても変化しないケースあり。Stringとか)

-XX:hashCode=0