美文网首页
jvm优化实战

jvm优化实战

作者: 奋斗的韭菜汪 | 来源:发表于2020-11-01 19:59 被阅读0次
(1)串行垃圾收集器
-XX:+UseSerialGC
-XX:+UseSerialOldGC
(2)并行收集器(吞吐量优先)
-XX:+UseParallelGC
-XX:+UseParallelOldGC
(3)并发收集器(响应时间优先)
-XX:+UseConMarkSweepGc
-XX:+UseG1GC

jvm参数:
(1)标准参数
java -version/-help 提供的参数,不会随着jdk版本变化而变化
(2)-X参数
非标准参数,会随jdk版本变动而变动 例:-Xint
(3)-XX参数
-XX参数最常用的参数,可分为两类

a.Boolean类型
格式:-XX:[+-]<name>    +或-表示启用或者禁用name属性 
比如:-XX:+UseConcMarkSweepGC    表示启用CMS类型的垃圾回收器
        -XX:+UseG1GC    表示启用G1类型的垃圾回收器
b.非Boolean类型 
格式:-XX<name>=<value>  表示name属性的值是value 
比如:-XX:MaxGCPauseMillis=500

(4)其他参数(也可理解成-XX参数,官方只分为三种)

   -Xms100M等价于 -XX:InitialHeapSize=100M
   -Xmx100M等级于 -XX:MaxHeapSize=100M
   -Xss100k等价于 -XX:ThreadStackSize=100k

启动java进程时打印jvm参数信息:
-XX:+PrintFlagsFinal
jvm参数设置的方式:
(1)本地环境idea,eclipse
(2)jar包启动 java -XX:+UseG1GC xxx.jar
(3)tomcat等容器启动,一般bin文件中有xxx.sh启动文件中配置
(4)实时修改,不需要重启服务:jinfo
常用JVM需要调优的参数:
常用JVM调优命令:(不需要安装jdk自带,配置环境变量就已经有了)
1、jps:查看当前java进程
2、jinfo:查看或修改java参数(jinfo -flag MaxHeapSize pid:查看pid进程的最大堆内存的值,jinfo -flag UseG1Gc pid:查看pid进程是否使用G1垃圾收集器)
实时修改vm参数中的某个值:jinfo -flag name=value pid(注:只有标记是manageable才能实时修改)

image.png
3、jstat:
jstat -class pid 1000 10:打印pid进程的类加载信息,1秒打印一次,打印10次
jstat -gc pid 1000 10:打印pid进程的gc收集情况,1秒打印一次,打印10次
4、jstack:查看线程的堆栈信息(主要是线程信息,如果线程出现问题方便排查,例如多线程抢占锁死锁问题)
5、jmap:生成堆内存的快照(排查oom异常)
jmap -heap pid
参数解析:
image.png
MaxHeapSize 最大堆内存300M
NewSize新生代100M
OldSize老年代200M
NewRatio老年代新生代大小比例2
生产环境oom异常自动dump内存信息文件:
启动脚本中加入:-XX:+heapDumpOutOfMemoryError -XX:HeapDumpPath=heap.hprof
java内存可视化工具:jconsole、jvisualvm(支持远程连接)、arthas(alibaba产品)
jvm优化关注的点:
1、堆内存分析
堆内存分析工具MAT,通过分析dump文件heap.hprof,分析内存问题
在线工具:PerfMa
2、垃圾回收(GC日志)
gcviewer工具,分析gc日志,关注吞吐量和停顿时间
在线工具gceasy
** -XX参数**
使用得最多的参数类型
非标准化参数,相对不稳定,主要用于JVM调优和Debug
获取Dump文件
手动:
jmap -dump:format=b,file=heap.hprof 44808
自动:
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=heap.hprof

Histogram可以列出内存中的对象,对象的个数及其大小

Class Name:类名称,java类名 Objects:类的对象的数量,这个对象被创建了多少个
Shallow Heap:一个对象内存的消耗大小,不包含对其他对象的引用
Retained Heap:是shallow Heap的总和,即该对象被GC之后所能回收到内存的总和
右击类名--->List Objects--->with incoming references--->列出该类的实例
右击Java对象名--->Merge Shortest Paths to GC Roots--->exclude all ...--->找到GC Root以及原因

Leak Suspects

查找并分析内存泄漏的可能原因
Reports--->Leak Suspects--->Details

Top Consumers: 列出大对象
GC日志分析工具
要想分析日志的信息,得先拿到GC日志文件才行,所以得先配置一下
根据前面参数

-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -Xloggc:gc.log

工具:GCViewer,在线工具

相关文章

  • JVM调优

    JVM(Java虚拟机)优化大全和案例实战 JVM 优化经验总结 JVM 数据存储介绍及性能优化 JVM诊断...

  • JVM参数配置笔记

    参考: JVM(Java虚拟机)优化大全和案例实战

  • JVM内存模型详解

    jvm优化实战,程序猿门心中永远的痛!很多程序猿工作了多年,仍然停留在理论层面,对jvm生产环境的实战优化几乎一无...

  • java虚拟机回收机制

    ps: 参考 jvm机制 jvm的新生代里为什么有两个Survivor区FullGC优化实战 JVM 垃圾回收器工...

  • jvm优化实战

    jvm参数:(1)标准参数java -version/-help 提供的参数,不会随着jdk版本变化而变化(2)-...

  • JVM实战优化篇

    在前文《JVM原理解惑篇》中已经梳理了主要的JVM的理论基础:Java程序运行在Java虚拟机之上,JVM管理了整...

  • JVM实战优化篇

    在前文《JVM原理解惑篇》中已经梳理了主要的JVM的理论基础:Java程序运行在Java虚拟机之上,JVM管理了整...

  • jvm 相关阅读

    相关阅读 JVM性能优化1-JVM简介 JVM性能优化2-编译器 JVM性能优化3-垃圾回收 JVM性能优化4-C...

  • 性能调优参数

    堆内存性能优化参数 垃圾回收性能优化参数 JVM服务参数调优实战 服务器配置:8 CPU,8G MEM,JDK 1...

  • JVM故障分析篇

    在上一篇文章《JVM实战优化篇》中,梳理了JVM内存的核心参数,同时对新业务系统上线如何预估容量、垃圾回收器如何选...

网友评论

      本文标题:jvm优化实战

      本文链接:https://www.haomeiwen.com/subject/fyvrmktx.html