什么是JVM调优

前情提要

在这里插入图片描述

基础概念

吞吐量:用户代码时间 /(用户代码执行时间 + 垃圾回收时间)
响应时间:STW越短,响应时间越好

  • 吞吐量优先场景:科学计算、数据挖掘

  • 响应时间优先场景:网站页面、API提供

什么是JVM调优

jvm调优一般可以分为以下3点:

  1. 根据需求进行JVM规划和预调优
  2. 优化运行JVM运行环境(慢,卡顿)
  3. 解决JVM运行过程中出现的各种问题(OOM)

根据需求进行JVM规划和预调优

  1. 明确业务场景,吞吐量优先还是响应时间优先
    1. 响应时间优先(CMS、G1)
    2. 吞吐量优先(PS+PO)
  2. 计算内存需求
  3. 垃圾收集器与内存大小关系(经验)
    Serial - 100M以内
    PS - 100M 到 10G
    CMS - 20G
    G1 - 100G
    ZGC - 4T以内
  4. 根据业务场景和内存需求选定垃圾回收器组合
  5. 设置年轻代和老年代大小(一般默认就好)
  6. 设置GC日志参数,滚动日志或每天一个日志
  7. 观察日志

优化运行JVM运行环境(慢,卡顿)

系统CPU经常100%,如何调优?

CPU100%那么一定有线程在占用系统资源。
处理流程

  1. 使用 top 命令,找到CPU占用高的进程
  2. 使用 top -H -p 命令,查看该进程中哪个线程占用CPU高
  3. 将线程id转化为16进制,结合进程号和线程号,利用jstack显示出错的堆栈信息
    jstack -l <pid> | grep <thread-hex-id> -A 10
    
    -A 10 参数用来指定显示行数
  4. 根据堆栈信息定位

系统内存飙高,如何查找问题?

  1. 配置JVM启动参数 -XX:+HeapDumpOnOutOfMemoryError 或 手动导出堆内存
  2. 使用(jhat、jvisualvm、MAT、jprofiler(收费))分析

监控JVM

推荐一个比较好用的阿里开源的工具:arthas

解决JVM运行过程中出现的各种问题(OOM)

解决OOM问题与系统内存飙高解决思路一致,获取dump文件,分析之。

  1. 使用jmap导出dump文件。不过线上系统内存特别大的时候,jmap执行期间会对进程产生很大影响,甚至卡顿。如果条件允许(做了集群),可以先停掉这台服务器,然后执行jmap导出dump文件。
  2. 虚拟机启动时指定 -XX:+HeapDumpOnOutOfMemoryError 参数,抛出 OutOfMemoryError 时, 会自动执行堆转储。
  3. 使用arthas在线定位
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值