JVM调优
1.调优背景
-
生产中的问题
- 生产环境发生了内存溢出该如何处理?
- 生产环境应该给服务器分配多少内存合适?
- 如何对垃圾回收器的性能进行调优?
- 生产环境CPU负载过高时该如何处理?
- 生产环境应该给应用分配多少线程合适?
- 如何确定请求是否执行了某一行代码?
- 如何实时查看某个方法的入参与返回值?
-
为什么要调优
- 防止出现OOM溢出
- 解决OOM溢出问题
- 减少Full GC的频率
2.调优依据
- 运行日志
- 异常堆栈
- GC日志
- 线程快照
- 堆转储快照
3.调优步骤
-
性能监控发现问题
- 监控是一种以非强行或者非入侵方式收集或者查看应用运营性能数据的活动,是一种在生产、质量评估或者开发环境下实施的带有预防性的活动。
- 监控可以让我们了解到当前系统是否发生了GC频繁处理、OOM、内存泄露、死锁等行为。
-
性能分析排查问题
- 分析是一种以入侵方式来收集运行性能数据的活动,它会影响应用的吞吐量,通常在质量评估、系统测试或者开发环境下进行。
- 分析一般就是通过打印的GC日志、jmap等命令行工具、jconsole等可视化工具、dump堆存储文件作为依据进行的。
-
性能调优解决问题
- 调优是一种为改善应用吞吐量而更改参数、属性、配置的活动。
- 调优可以通过适当增加内存、优化代码、使用中间件、合理设置线程数量等手段进行。
4.调优指标
-
响应时间
从系统为用户提供服务的角度来看,它是提交请求到返回响应的这段时间,也叫作停顿时间。
-
吞吐量
对单位时间内完成的工作量的度量,在GC中,代表运行用户代码的时间占总运行时间的比例。
-
并发数
同一时刻,对服务器有实际交互的请求总数。
-
内存占用
Java堆空间所占用整体内存的大小。