JVM性能调优与故障诊断

122 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

元空间

元空间的本质和永久代类似,都是对JVM规范中方法区的实现。不过元空间与永久代之间最大的区别在于:元空间并不在虚拟机中,而是使用本地内存。JDK1.7及之前用永久代,JDK1.8开始用元空间。 字符串常量(池):JDK 1.7 和 1.8 将字符串常量由永久代转移到堆中。 字面量(interned strings):转移到了java heap; 类的静态变量(class statics):转移到了java heap。 运行时常量池(class文件元信息描述,编译后的代码数据,引用类型数据,类文件常量池):存在于本地内存的元空间中。 (所谓的运行时常量池其实就是将编译后的类信息放入运行时的一个区域中,用来动态获取类信息。运行时常量池是在类加载完成之后,将每个class常量池中的符号引用值转存到运行时常量池中,也就是说,每个class都有一个运行时常量池,类在解析之后,将符号引用替换成直接引用,与全局常量池中的引用值保持一致。)

JVM性能调优与故障诊断

@[toc]

JvmGC参数

  • 打印GC参数 -XX:PrintGC
  • 打印GC详细参数 -XX:PrintGCDetails
  • 打印堆GC参数 -XX:+PrintHeapAtGC
  • 打印GC发生时间 -XX:+PrintGCTimeStamps
  • 应用程序执行时间 -XX:+PrintGCApplicationConcurrentTime
  • 因GC产生停顿时间 -XX:+PrintGCApplicationStoppedTime
  • 软、弱、虚引用等 -XX:+PrintReferenceGC
  • GC日志目录 -Xloggc:log/gc.log

类加载与卸载参数跟踪

  • 加载与卸载 -verbose:class
  • 加载 -XX:+TraceClassLoading
  • 卸载 -XX:+TraceClassUnLoading
  • java对象使用情况 —XX:+PrintClassHistogram 按下: Ctrl+Break

JVM常用参数

  • Jvm命令行参数 -XX:+PrintVMOptions
  • 堆最大配置 -Xmx20M
  • 堆最小配置 -Xms5M
  • 元数据区大小 -XX:MaxMetaspaceSize
  • 栈大小配置 -Xss
  • 堆外内存 (默认为堆最大)-XX:MaxDirectMemorySize

垃圾回收算法

  • 引用计数法
  • 标记压缩法
  • 标记清除法
  • 复制算法
  • 分代、分区思想

命令行性能监控工具

  • 资源使用情况 top
  • 内存和CPU vmstat
  • 监控IO资源 iostat
  • 多功能诊断器 pidstat
  • 网络 netstat
  • 内核信息 dmesg
  • 命令神器 lsof
  • 进程树 pstree

Jdk性能监控工具

  • 虚拟机运行时信息 jstat

  • 虚拟机参数信息 jinfo

  • 导出堆文件 jmap

  • 堆分析工具jhat

  • 线程堆栈监控 jstack

  • 远程主机信息收集 jstatd

  • 多功能命令行 jcmd

  • 性能统计工具 hprof

图形化工具

  • JConsole

  • Visual VM

  • BTrace

  • Mission Control

  • MAT分析Java堆