概述篇
一、大厂面试题
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IprxX5rC-1628601382536)(C:/Users/PePe/AppData/Roaming/Typora/typora-user-images/image-20210810202730383.png)]](https://file2.kaopuke.com:8081/files_image/2023062409/1a1451645a804220b44812e3db1ec61a.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dEsunAOT-1628601382538)(C:/Users/PePe/AppData/Roaming/Typora/typora-user-images/image-20210810202737023.png)]](https://file2.kaopuke.com:8081/files_image/2023062409/ea6fd8adb7b74e98afdd2631d6316f98.png)
二、背景说明
1、生产环境中的问题
-
生产环境发生了内存溢出该如何处理
-
生产环境应该给服务器分配多少内存合适?
-
如何对垃圾回收器的性能进行调优?
-
生产环境CPU负载飙高该如何处理?
-
生产环境应该给应用分配多少线程合适?
-
不加log,如何确定请求是否执行了某一行代码?
-
不加log,如何实时查看某个方法的入参与返回值?
2、为什么要调优
- 防止出现OOM
- 解决OOM
- 减少Full GC出现的频率
3、不同阶段的考虑
- 上线前
- 项目运行阶段
- 线上出现OOM
三、调优概述
1、监控的依据
-
运行日志
-
异常堆栈
-
GC日志
-
线程快照
-
堆转储快照
2、调优的大方向
jvm调优只是在优化的一种方式之一
- 合理地编写代码
- 充分并合理的使用硬件资源
- 合理地进行JVM调优
四、性能优化的步骤
1、第1步(发现问题):性能监控
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bu4ovrxc-1628601382540)(C:/Users/PePe/AppData/Roaming/Typora/typora-user-images/image-20210810210046183.png)]](https://file2.kaopuke.com:8081/files_image/2023062409/cabfca60741b4508a1468f09620e29c1.png)
- GC频繁
- cpu load过高
- OOM
- 内存泄露
- 死锁
- 程序响应时间较长
2、第2步(排查问题):性能分析
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DXpOxHLo-1628601382543)(C:/Users/PePe/AppData/Roaming/Typora/typora-user-images/image-20210810210103858.png)]](https://file2.kaopuke.com:8081/files_image/2023062409/da10337273f841d0bf221f467029bed3.png)
-
打印GC日志,通过GCviewer或者http://gceasy.io来分析异常信息
-
灵活运用命令行工具、jstack、jmap、jinfo等
-
dump出堆文件,使用内存分析工具分析文件
-
使用阿里Arthas、jconsole、JVisualVM来实时查看JVM状态
-
jstack查看堆栈信息
3、第3步(解决问题):性能调优
- 适当增加内存,根据业务背景选择垃圾回收器
- 优化代码,控制内存使用
- 增加机器,分散节点压力
- 合理设置线程池线程数量
- 使用中间件提高程序效率,比如缓存、消息队列等
- 其他……
性能调优的目的:
1、减少FullGC次数
2、以较小的内存,获得较高的吞吐量、响应时间
五、性能评价(测试指标)
1、停顿时间(或响应时间)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F0h5wMGf-1628601382545)(C:/Users/PePe/AppData/Roaming/Typora/typora-user-images/image-20210810203522187.png)]](https://file2.kaopuke.com:8081/files_image/2023062409/5480e1875420472995ff30d404823ce2.png)
2、吞吐量
-
对单位时间内完成的工作量(请求)的量度 -
在GC中:运行用户代码的事件占总运行时间的比例(总运行时间:程序的运行时间+内存回收的时间)吞吐量为1-1/(1+n),其中
-XX::GCTimeRatio=n -
并发数—同一时刻,对服务器有实际交互的请求数
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ylSLi234-1628601382546)(C:/Users/PePe/AppData/Roaming/Typora/typora-user-images/image-20210810203556281.png)]](https://file2.kaopuke.com:8081/files_image/2023062409/89be3a46069940c9bef57a2cb9ca4bfa.png)
- 内存占用-–Java堆区所占的内存大小
- 相互间的关系-–以高速公路通行状况为例↓
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0RUvSGVk-1628601382549)(C:/Users/PePe/AppData/Roaming/Typora/typora-user-images/image-20210810203618235.png)]](https://file2.kaopuke.com:8081/files_image/2023062409/f7c82763477640d4bb4f6d276e669f9c.png)
最后
以上就是真实跳跳糖最近收集整理的关于Day355.性能监控与调优概述 -JVM概述篇的全部内容,更多相关Day355.性能监控与调优概述内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复