JVM(十) - 性能调优

本文详述了JVM性能调优的重要性、原则和目的,涵盖了从何时需要调优到常用的JVM参数命令,包括GC参数、Parallel、CMS和G1等。此外,还介绍了JVM调优工具,如Jconsole、JVisualVM、阿里arthas等,以及如何排查高CPU和OOM等问题。
摘要由CSDN通过智能技术生成

一、JVM调优

性能调优包含多个方面:架构调优、代码调优、JVM调优、数据库调优、操作系统调优等。其中架构调优和代码调优是基础,架构的调优对系统影响最大。性能调优基本步骤:

  1. 明确优化目标
  2. 发现性能瓶颈
  3. 性能调优
  4. 监控及数据统计
  5. 确认是否达到目标

1、什么时候需要JVM调优

  • 应用系统慢(响应性能下降,吞吐量下降)、卡顿(GC停顿时间长、次数频繁)
  • 应用出现OOM等内存异常(使用的堆内存过大、本地缓存过大;会发生OOM的区域:堆、元空间、虚拟机栈、本地方法栈、直接内存)

2、JVM调优的原则

JVM调优是一种手段,但并不一定所有问题都需要通过JVM调优解决,最有效的优化手段是架构和代码层面的优化。所以JVM优化是最后不得已的手段,在架构调优和代码调优后对服务器配置的最后一次"压榨"。

所以JVM调优应遵守的原则:

  • 上线之前应先将机器的JVM参数设置到最优;
  • 大多数的Java应用不需要进行JVM优化;
  • 大多数导致GC问题的原因是代码层面的问题导致的(代码层面);
  • 减少创建对象的数量、减少使用全局变量和大对象(代码层面);
  • 优先架构调优和代码调优,JVM优化是不得已的手段(代码、架构层面);
  • 分析GC情况优化代码比优化JVM参数更好(代码层面);

3、JVM调优目的

  1. 吞吐量:用户代码运行时间 / (用户代码运行时间 + GC时间)
  2. 响应时间:STW越短,响应时间越好

二、JVM常用参数命令

官方Java参数文档:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html

1、了解JVM常用命令行参数

Hot Spot JVM调优参数区分大小写,参数分类:

  • 标准参数:- 开头,所有的Hot Spot都支持;
  • 非标准参数:-X 开头,特定版本的Hot Spot支持的特定命令;
  • 不稳定参数:-XX 开头,下个版本可能取消;

输入:Java查看命令

输入:Java -X 查看非标准参数

输入:Java -XX:+PrintFlagsInitial 查看默认参数及值

输入:Java -XX:+PrintFlagsFinal 查看最终生效参数及值

输入:Java -XX:+PrintCommandLineFlags 查看启动时的命令行参数

JVM垃圾回收器使用配置:

  • -XX:+UseSerialGC:新生代使用Serial,老年代使用Serial Old;
  • -XX:+UseParallelGC/-XX:UseParallelOldGC:新生代使用Parallel Scavenge,老年代使用Parallel Old
  • -XX:+UseParNewGC:新生代使用ParNew,老年代自动使用Serial Old;
  • -XX:+UseConMarkSweepGC:新生代使用ParNew,老年代使用CMS + Serial Old;
  • -XX:+UseG1GC:使用G1;

JDK1.8server模式下,默认使用PS+PO收集器。

2、GC常用参数

  • -Xms:设置堆的初识内存大小,包含年轻代和老年代,JVM内存设置默认单位为Byte,也可以用k/K、m/M、g/G来声明其他单位。
  • -Xmx:设置堆的最大内存大小,-Xms和-Xmx一样时,可以避免内存不够时动态调整内存带来的内存波动
  • -Xmn:设置年轻代大小,包括Eden区和
  • -Xss:设置线程最大栈空间,JDK5以后每个线程堆栈大小为1M,直接决定了函数可调用的最大深度。在相同物理内存下,减小这个值能生成更多的线程,但一个进程内的线程是有限的,也不是越多效率越高,经验值在3000~5000左右。
  • -XX:MetaspaceSize:设置方法区(元空间)初始值,可动态扩展,如果没有
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值