JVM如何调优

一、调优基本问题

1.1 为什么要调优

  • 防止出现OOM(OutOfMemoryError,内存不足),进行JVM规划和预调优。
  • 解决程序运行中各种OOM。
  • 减少Full GC出现的频率,解决运行慢,卡顿问题。

1.2 调优的大方向

  • 合理的编写代码
  • 充分并合理的使用硬件资源
  • 合理的进行JVM调优

1.3 不同阶段的考虑

  • 上线前
  • 项目运行阶段
  • 线上出现OOM

1.4 注意点

  • 无监控,不调优
  • 调优,从业务场景开始,没有业务场景的调优都是耍流氓。

二、性能优化的步骤

2.1 熟悉业务场景

2.2 发现问题(性能监控)

  • GC频繁
  • CPU load过高
  • OOM
  • 内存泄漏
  • 死锁
  • 程序响应时间较长

在这里插入图片描述

2.3 排查问题:性能分析

  1. 打印GC日志,通过GCviewer或者http://gceasy.io来分析日志信息
  2. 灵活运用命令行工具jstack,jmap等。
  3. dump出堆文件,使用内存分析工具分析文件
  4. 使用阿里Arthas,VisualVM和jConsole来实时监控JVM状况。
  5. jstack查看堆栈信息

三、解决问题:性能调优

  • 适当增加内存,根据业务场景选择垃圾回收器。
  • 优化代码。控制内存使用
  • 增加机器,分散节点压力。
  • 合理设置线程池线程数量
  • 使用中间件提高程序效率,比如缓存,消息队列等。

四、使用Apache JMeter进行性能测试

使用Apache JMeter进行性能测试

五、优化案例

5.1 调整堆大小提升服务的吞吐量

5.2 逃逸分析

堆,是分配对象的唯一选择吗?

在这里插入图片描述

5.2.1 编译的开销

时间开销

在这里插入图片描述
在这里插入图片描述

空间开销

在这里插入图片描述

5.2.2 即时编译对代码的优化

逃逸分析

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

示例

在这里插入图片描述
在这里插入图片描述

5.2.3 代码优化

代码优化一:栈上分配

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

代码优化二:同步省略(消除)

在这里插入图片描述
在这里插入图片描述

代码优化三:标量替换

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
测试
在这里插入图片描述

在这里插入图片描述

注意,必须启动逃逸分析,才能使用标量替换

5.2.4 逃逸分析总结

在这里插入图片描述

5.3 合理配置堆内存

推荐配置

在这里插入图片描述

如何计算老年代存活对象

方式一:查看日志在这里插入图片描述
方式2:强制触发Full GC
在这里插入图片描述
在这里插入图片描述

如何计算GC的频率

在这里插入图片描述

5.4 新生代和老年代的比例

在这里插入图片描述

5.5 CPU占用很高排查方案

JVM调优之JVM自带性能调优工具

5.6 G1并发执行的线程数对性能的影响

在这里插入图片描述

5.7 调整垃圾回收器提升服务的吞吐量

5.8 日均百万订单如何设置JVM参数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三级目录

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值