Day355.性能监控与调优概述 -JVM
Posted 阿昌喜欢吃黄桃
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Day355.性能监控与调优概述 -JVM相关的知识,希望对你有一定的参考价值。
概述篇
一、大厂面试题
二、背景说明
1、生产环境中的问题
-
生产环境发生了内存溢出该如何处理
-
生产环境应该给服务器分配多少内存合适?
-
如何对垃圾回收器的性能进行调优?
-
生产环境CPU负载飙高该如何处理?
-
生产环境应该给应用分配多少线程合适?
-
不加log,如何确定请求是否执行了某一行代码?
-
不加log,如何实时查看某个方法的入参与返回值?
2、为什么要调优
- 防止出现OOM
- 解决OOM
- 减少Full GC出现的频率
3、不同阶段的考虑
- 上线前
- 项目运行阶段
- 线上出现OOM
三、调优概述
1、监控的依据
-
运行日志
-
异常堆栈
-
GC日志
-
线程快照
-
堆转储快照
2、调优的大方向
jvm调优只是在优化的一种方式之一
- 合理地编写代码
- 充分并合理的使用硬件资源
- 合理地进行JVM调优
四、性能优化的步骤
1、第1步(发现问题):性能监控
- GC频繁
- cpu load过高
- OOM
- 内存泄露
- 死锁
- 程序响应时间较长
2、第2步(排查问题):性能分析
-
打印GC日志,通过GCviewer或者http://gceasy.io来分析异常信息
-
灵活运用命令行工具、jstack、jmap、jinfo等
-
dump出堆文件,使用内存分析工具分析文件
-
使用阿里Arthas、jconsole、JVisualVM来实时查看JVM状态
-
jstack查看堆栈信息
3、第3步(解决问题):性能调优
- 适当增加内存,根据业务背景选择垃圾回收器
- 优化代码,控制内存使用
- 增加机器,分散节点压力
- 合理设置线程池线程数量
- 使用中间件提高程序效率,比如缓存、消息队列等
- 其他……
性能调优的目的:
1、减少FullGC次数
2、以较小的内存,获得较高的吞吐量、响应时间
五、性能评价(测试指标)
1、停顿时间(或响应时间)
2、吞吐量
-
对单位时间内完成的工作量(请求)的量度
-
在GC中:运行用户代码的事件占总运行时间的比例(总运行时间:程序的运行时间+内存回收的时间)吞吐量为1-1/(1+n),其中
-XX::GCTimeRatio=n
-
并发数—同一时刻,对服务器有实际交互的请求数
- 内存占用-–Java堆区所占的内存大小
- 相互间的关系-–以高速公路通行状况为例↓
以上是关于Day355.性能监控与调优概述 -JVM的主要内容,如果未能解决你的问题,请参考以下文章