JVM内核—JVM调优

来源:互联网 发布:java 对象转map 编辑:程序博客网 时间:2024/05/16 10:26

目录:

1.常用JVM调优参数

2. GC日志

3.常用JVM调优工具

        3.1 JConsole

        3.2 JVisualVM

        3.3 JStat

        3.4 JMap

4.通过Thread Dump诊断JVM性能

1.常用JVM调优参数


  • -XX:+PrintGCDetails  打印详细垃圾回收信息
  • -Xms  为Heap区域的初始值
  • -Xmx  为Heap区域的最大值,线上环境需要与-Xmx设置为一致,以免JVM堆内存使用达到Xmx值,并且进行垃圾回收后,会收缩堆大小至Xms值
  • -Xss(或-ss)  线程栈大小,JDK1.5之前默认为256K,之后是1M
  • -XX:PermSize与-XX:MaxPermSize  方法区(永久代)的初始大小和最大值(JDK1.7以后更改为-XX:MetaspaceSize与-XX:MaxMetaspaceSize
  • -XX:NewRatio  老年代与新生代比率,默认为2:1
  • -XX:SurvivorRatio  Eden与Survivor的占用大小比例,默认为8,如上图所示
  • -Xmn  新生代区大小
  • -XX:MaxTenuringThreshold  对象在Survivor区熬过Minor GC的年龄阈值,默认是15,一旦达到,就会被复制到年老代区
  • -XX:+HeapDumpOnOutOfMemoryError  当JVM发生内存溢出时,Dump出当前的内存堆转储快照,以便分析用

2.GC日志

1.Minor GC:

2.Full GC:

3.常用JVM调优工具

3.1 JConsole

JConsole是JDK自带的JVM性能分析的图形化工具,可以查看当前应用的对象引用、内存、CPU使用情况、线程运行情况(阻塞、等待等)。
详见JConsole使

3.2 JVisualVM

一款商用的JVM性能分析的图形化工具,JConsole的增强版。
详见JVisualVM使用

3.3 JStat

JDK自带的命令行工具,传入进程ID,可以得到GC的详细信息(包括内存各区的空间占用情况,Minor GC和Full GC分别的发生次数和累计时间)等。

详见JStat使用

3.4 JMap

JDK自带的命令行工具,传入进程ID,可以得到JVM内存各区的详细空间占用情况,以及所加载的类对象数目和对象的内存占用情况。

详见JMap使用

4.通过Thread Dump诊断JVM性能

  • Thread Dump是JVM中所有Java线程的快照,此文件中包含各线程的堆栈跟踪信息、线程名、线程ID、线程状态(Running,Blocked,DeadLock等)、以及线程调用的方法堆栈信息。
  • 通过Thread Dump可以诊断一下问题:

  1. 通过各线程的资源利用情况,结合Thread Dump,诊断代码bug,死锁,线程Blocked等。
  2. 查找内存泄漏(由于Minor GC相当快,应用程序并不会受到影响,Full GC可能会造成应用卡顿、超时;这时GC Task Thread可能会占用较高的CPU资源)。

详见性能分析之Java Thread Dump,三个实例演示Java Thread Dump

结语:本节向大家介绍了JVM调优方案,下节将和大家一块来学习JVM类加载机制。


0 0
原创粉丝点击