微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JVM调优

1、根据需求进行JVM的规划和预调优。
吞吐量、及时响应的需求不同使用不同的垃圾回收器。
2、优化正在运行中的jvm(慢,卡顿)
3、解决jvm运行中的各种问题,oom等。

调优JVM其实就是在理解JVM内存结构以及各种垃圾收集器前提下,结合自己的现有的业务来调整参数,使自己的应用能够正常稳定运行。
一般调优JVM我们认为会有几种指标可以参考:『吞吐量』、『停顿时间』和『垃圾回收频率』。
基于这些指标,我们就有可能需要调整:

  1. 内存区域大小以及相关策略
    比如:整块堆内存占多少、新生代占多少、老年代占多少、Survivor占多少、晋升老年代的条件等等
    比如:-Xmx:设置堆的最大值、-xms:设置堆的初始值、-Xmn:表示年轻代的大小、-XX:SurvivorRatio:伊甸区和幸存区的比例等等
    按经验来说:IO密集型的可以稍微把「年轻代」空间加大些,因为大多数对象都是在年轻代就会灭亡。内存计算密集型的可以稍微把「老年代」空间加大些,对象存活时间会更长些
  2. 垃圾回收器
    选择合适的垃圾回收器,以及各个垃圾回收器的各种调优参数
    比如:-XX:+UseG1GC:指定 JVM 使用的垃圾回收器为 G1、-XX:MaxGCPauseMillis:设置目标停顿时间、-XX:InitiatingHeapOccupancyPercent:当整个堆内存使用达到一定比例,全局并发标记阶段 就会被启动等等
    没错,这些都是因地制宜,具体问题具体分析(前提是得懂JVM的各种基础知识,基础知识都不懂,谈何调优),没错,这些都是因地制宜,具体问题具体分析(前提是得懂JVM的各种基础知识,基础知识都不懂,谈何调优)

一般我们是「遇到问题」之后才进行调优的,而遇到问题后需要利用各种的「工具」进行排查

  1. 通过jps命令查看Java进程「基础」信息(进程号、主类)。这个命令很常用的就是用来看当前服务器有多少Java进程在运行,它们的进程号和加载主类是啥
  2. 通过jstat命令查看Java进程「统计类」相关的信息(类加载、编译相关信息统计,各个内存区域GC概况和统计)。这个命令很常用于看GC的情况

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐