Jvm memory

47
JVM Memory 2013.4.19 Xuefeng.Wu Benewu(at)gmail.com

Transcript of Jvm memory

Page 1: Jvm memory

JVM Memory2013.4.19 Xuefeng.WuBenewu(at)gmail.com

Page 2: Jvm memory

Agenda• JVM Memory Layout with flag and OOM• GC• Debug tools

http://docs.oracle.com/javase/specs/

http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html#jvms-2.5

Run-Time Data Areas

Page 3: Jvm memory

Memory

Page 4: Jvm memory

JVM memory overview

Page 5: Jvm memory

JVM Memory Parametes

Page 6: Jvm memory

Code

Page 7: Jvm memory

References and objects

Page 8: Jvm memory

Runtime Data Area

Page 9: Jvm memory

VM

Page 10: Jvm memory

http://www.2cto.com/kf/201108/99433.html

Page 11: Jvm memory

Java Object Heap• -Xmx,-Xms,-Xmn

• Eden, Survivor Space

• -XX:NewRatio =80%, -XX:Survivor

• Old Generation --- Long live, Big Object

• Demo:BigObject.java

Page 12: Jvm memory

Perm Space•  -XX:MaxPermSize=128m

• Classes, method• String pools

Page 13: Jvm memory

Code Generation• Bytecode to native code

• 10k calls

• JVM will crash

Page 14: Jvm memory

Socket Buffer• Revieve ~37K• Send ~25k

• Java.lang.StackOverflowError

• Demo: SocketBuffer.java • Too many open files

Page 15: Jvm memory

Thread stack• -Xss

• Each thread has a separate memory space

• Default value dependence on OS

• Demo: ThreadAllocation.java

Page 16: Jvm memory

Direct Memory Space • Map memory outside the java object heap

• Java.nio.ByteBuffer.allocateDirect

• -XX:MaxDirectMemorySize=<value>

Page 17: Jvm memory

JNI• JNI programs allocate memory

Page 18: Jvm memory

GC• Threads• GC information

Page 19: Jvm memory

GARBAGE COLLECTION

Page 21: Jvm memory

JVM roots

Page 22: Jvm memory

基本GC收集算法• 复制 (copying)• 标记清除 (mark-sweep)• 标记整理 (mark-sweep-compact)

Page 23: Jvm memory

复制 (copying)

Page 24: Jvm memory

标记清除 (mark-sweep)

Page 25: Jvm memory

标记整理 (mark-sweep-compact)

Page 26: Jvm memory

GC收集器类型

• 古老的串行收集器 (Serial Collector)• 吞吐量优先的并行收集器 (Throughput Collector)• 暂停时间优先的并发收集器 (Concurrent Low Pause

Collector-CMS)• 增量并发收集器 (Incremental Concurrent-Mark-

Sweep/i-CMS)

Page 27: Jvm memory

古老的串行收集器 (Serial Collector)

Page 28: Jvm memory

吞吐量优先的并行收集器(Throughput Collector)

-XX:+UseParallelGC

Page 29: Jvm memory

暂停时间优先的并发收集器(Concurrent Low Pause

Collector-CMS)

-XX:+UseConcMarkSweepGC

Page 30: Jvm memory

增量并发收集器 (Incremental Concurrent-Mark-Sweep/i-CMS)

Page 31: Jvm memory

SUN JDK GC

Page 32: Jvm memory

JVM parameters in Java

http://javarevisited.blogspot.com/2011/11/hotspot-jvm-options-java-examples.html

Page 33: Jvm memory

Tools

Page 34: Jvm memory

JVM Tools

Page 35: Jvm memory

 jps(Java Virtual Machine Process Status Tool)• 用来查看基于 HotSpot JVM 里面所有进程的具体状

态 ,  包括进程 ID ,进程启动的路径等等。

• jps [ options ] [ hostid ]

Page 36: Jvm memory

 jstack(Java Stack Trace)

• jstack 用于打印出给定的 java 进程 ID 或 core file 或远程调试服务的 Java 堆栈信息,如果是在 64 位机器上,需要指定选项 "-J-d64“

• jstack [-l] pid

Page 37: Jvm memory

jstat(Java Virtual Machine Statistics Monitoring Tool)• Jstat 是 JDK 自带的一个轻量级小工具。利用 JVM 内建的

指令对 Java 应用程序的资源和性能进行实时的命令行的监控,包括了对 Heap size 和垃圾回收状况的监控。

 • jstat [ generalOption | outputOptions vmid [interv

al[s|ms] [count]] ] 

Page 38: Jvm memory

 jmap(Java Memory Map)

• 打印出某个 java 进程(使用 pid )内存内的,所有‘对象’的情况(如:产生那些对象,及其数量)。

• jmap -J-d64 -heap pid• jmap -dump:format=b,file=test.bin 4939

Page 39: Jvm memory

jhat(Java Heap Analyse Tool)

• jhat 是一个 Java 堆复制浏览器。这个工具分析 Java 堆复制文件(例如,由上面的 "jmap -dump" 所产生的)。Jhat 启动一个允许堆中的对象在 web 浏览器中进行分析的 web 服务器。

• jhat -J-mx768m -port < 端口号 : 默认为 7000> heap.dmp

Page 40: Jvm memory

jvisualvm

Page 41: Jvm memory

BTrace

Page 42: Jvm memory

BTrace

Page 43: Jvm memory

Btrace script

Demo

Page 44: Jvm memory

JMX• JMX ( Java Management Extensions ,即 Java 管理

扩展)是 Java平台上为应用程序、设备、系统等植入管理功能的框架。

Page 45: Jvm memory

JMSMonitor

JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:3333/jmxrmi");

JMXConnector jmxConnector = JMXConnectorFactory.connect(url);

MBeanServerConnection serverConn = jmxConnector.getMBeanServerConnection();

MBeanServerConnection serverConn = jmxConnector.getMBeanServerConnection();

Println(memoryMXBean.getHeapMemoryUsage().getUsed());

-Dcom.sun.management.jmxremote.port=3333 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=10.112.37.92

Demo:JMSMonitor.java

Page 46: Jvm memory

MBeans

Page 47: Jvm memory