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的情况

相关文章

jinfo 命令可以用来查看 Java 进程运行的 JVM 参数,命令如下...
原文链接:https://www.cnblogs.com/niejunlei/p/5987611.ht...
java 语言, 开发者不能直接控制程序运行内存, 对象的创建都是...
jvm
1.jvm的简单抽象模型:  2.类加载机制     双亲委派模...
堆外内存JVM启动时分配的内存,称为堆内存,与之相对的,在代...
1.springboot和tomcat2.springcloud的请求如何通过网关鉴权?...