【13-JVM面试专题-JVM调优经验-JVM调优常用命令-G1调优策略-JVM性能优化指南-JVM性能调优的工具】

JVM调优经验-JVM调优常用命令-G1调优策略-JVM性能优化指南-JVM性能调优的工具

【13-JVM面试专题-JVM调优经验-JVM调优常用命令-G1调优策略-JVM性能优化指南-JVM性能调优的工具】_第1张图片

JVM调优经验-JVM调优常用命令-G1调优策略-JVM性能优化指南-JVM性能调优的工具?你掌握的怎么样呢?

JVM调优经验-JVM调优常用命令

查看java进程

jps

实时查看和调整JVM配置参数

jinfo

查看用法(查看某个java进程的name属性的值)

jinfo -flag MaxHeapSize PID 
jinfo -flag UseG1GC PID

修改(参数只有被标记为manageable的flags可以被实时修改)

jinfo -flag [+|-] PID
jinfo -flag <name>=<value> PID

查看曾经赋过值的一些参数

jinfo -flags PID

查看虚拟机性能统计信息

jstat

查看类装载信息

jstat -class PID 1000 10   查看某个java进程的类装载信息,每1000毫秒输出一次,共输出10

查看垃圾收集信息

jstat -gc PID 1000 10

查看线程堆栈信息

jstack

查看某一个线程堆栈信息

jstack PID

G1调优策略

(1)不要手动设置新生代和老年代的大小,只要设置整个堆的大小

G1的自动调优:https://blogs.oracle.com/poonam/increased-heap-usage-with-g1-gc

G1收集器在运行过程中,会自己调整新生代和老年代的大小
其实是通过adapt代的大小来调整对象晋升的速度和年龄,从而达到为收集器设置的暂停时间目标
如果手动设置了大小就意味着放弃了G1的自动调优

(2)不断调优暂停时间目标

 一般情况下这个值设置到100ms或者200ms都是可以的(不同情况下会不一样),但如果设置成50ms就不太合理。暂停时间设置的太短,就会导致出现G1跟不上垃圾产生的速度。最终退化成Full GC。所以对这个参数的调优是一个持续的过程,逐步调整到最佳状态。暂停时间只是一个目标,并不能总是得到满足。

(3)使用-XX:ConcGCThreads=n来增加标记线程的数量

IHOP如果阀值设置过高,可能会遇到转移失败的风险,比如对象进行转移时空间不足。如果阀值设置过低,就会使标记周期运行过于频繁,并且有可能混合收集期回收不到空间。 
IHOP值如果设置合理,但是在并发周期时间过长时,可以尝试增加并发线程数,调高ConcGCThreads

(4)MixedGC调优

-XX:InitiatingHeapOccupancyPercent
-XX:G1MixedGCLiveThresholdPercent
-XX:G1MixedGCCountTarger
-XX:G1OldCSetRegionThresholdPercent

(5)适当增加堆内存大小

(6)不正常的Full GC**

注意:有时候会发现系统刚刚启动的时候,就会发生一次Full GC,但是老年代空间比较充足,一般是由Metaspace区域引起的。可以通过MetaspaceSize适当增加其大家,比如256M。

JVM性能调优的工具

1.性能监控工具

1.1 jconsole

JConsole工具是JDK自带的图形化性能监控工具。并通过JConsole工具, 可以查看Java应用程序的运行概况, 监控堆信息、 元空间使用情况及类的加载情况等。

1.2 jvisualvm

官网:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jvisualvm.html

Java VisualVM 是一个直观的图形用户界面,可在基于 Java 技术的应用程序(Java 应用程序)在指定的 Java 虚拟机 (JVM) 上运行时提供有关它们的详细信息。

Java VisualVM 将多个监控、故障排除和分析实用程序组合到一个工具中。例如,独立工具jmap、jinfo和提供jstat,的大部分功能jstack都集成到 Java VisualVM 中。其他功能,例如jconsole命令提供的一些功能,可以作为可选插件添加。

Java VisualVM 对于 Java 应用程序开发人员对应用程序进行故障排除以及监控和改进应用程序的性能非常有用。Java VisualVM 使开发人员能够生成和分析堆转储、跟踪内存泄漏、执行和监视垃圾收集以及执行轻量级内存和 CPU 分析。

1.3 arthas

github:https://github.com/alibaba/arthas

Arthas allows developers to troubleshoot production issues for Java
applications without modifying code or restarting servers.

Arthas 是Alibaba开源的Java诊断工具,采用命令行交互模式,是排查jvm相关问题的利器。

2.内存分析工具

2.1 MAT(Memory Analyzer Tool)

MAT是一款非常强大的内存分析工具,在Eclipse中有相应的插件,同时也有单独的安装包。在进行内存分析时,只要获得了反映当前设备内存映像的hprof文件,通过MAT打开就可以直观地看到当前的内存信息。一般说来,这些内存信息包含:

  • 所有的对象信息,包括对象实例、成员变量、存储于栈中的基本类型值和存储于堆中的其他对象的引用值。
  • 所有的类信息,包括classloader、类名称、父类、静态变量等
  • GCRoot到所有的这些对象的引用路径
  • 线程信息,包括线程的调用栈及此线程的线程局部变量(TLS)
2.2 heaphero

https://heaphero.io/

2.3 perfma

笨马是一个JVM调优工具,甚至会给你相应的JVM调优建议,但是他是一个收费工具,不过如果你仅仅是希望调优参数,可以使用试用版。但是他的调优建议都是简单的参数设置。

https://console.perfma.com/

3.日志分析工具

要想分析日志的信息,得先拿到GC日志文件才行,所以得先配置一下,根据前面参数的学习,下面的配置很容易看懂。比如打开windows中的catalina.bat,在第一行加上
XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps
-Xloggc:$CATALINA_HOME/logs/gc.log

3.1 GCViewer

java -jar gcviewer-1.36-SNAPSHOT.jar

3.2 gceasy

http://gceasy.io

3.3 gcplot

https://it.gcplot.com/

JVM性能优化指南

【13-JVM面试专题-JVM调优经验-JVM调优常用命令-G1调优策略-JVM性能优化指南-JVM性能调优的工具】_第2张图片

总结:

JVM知识在面试过程中非常高频,大家一定要牢牢掌握,如果以上文章有帮助到你,希望可以点个关注,留下属于你的足迹,比心!我们下节再见哦。

你可能感兴趣的:(JVM,jvm,面试,JVM调优常用命令,JVM性能调优工具,java)