Java充电社
专辑
博文
联系我
本人继续续收门徒,亲手指导
JVM下篇性能监控与调优
-> 概述篇
1、概述篇
2、JVM监控及诊断工具-命令行篇
3、JVM监控及诊断工具-GUI篇
4、JVM运行时参数
5、分析GC日志
6、使用OQL语言查询对象信息
7、浅堆深堆与内存泄露
下一篇:JVM监控及诊断工具-命令行篇
<div style="display:none"></div> > 笔记来源:<a target="_blank" href="https://www.bilibili.com/video/BV1PJ411n7xZ" title="尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机)">尚硅谷 JVM 全套教程,百万播放,全网巅峰(宋红康详解 java 虚拟机)</a> > ## 1.1. 大厂面试题 > <mark>支付宝:</mark> > > 支付宝三面:JVM 性能调优都做了什么? > > <mark>小米:</mark> > > 有做过 JVM 内存优化吗? > > 从 SQL、JVM、架构、数据库四个方面讲讲优化思路 > > <mark>蚂蚁金服:</mark> > > JVM 的编译优化 > > jvm 性能调优都做了什么 > > JVM 诊断调优工具用过哪些? > > 二面:jvm 怎样调优,堆内存、栈空间设置多少合适 > > 三面:JVM 相关的分析工具使用过的有哪些?具体的性能调优步骤如何 > > <mark>阿里:</mark> > > 如何进行 JVM 调优?有哪些方法? > > 如何理解内存泄漏问题?有哪些情况会导致内存泄漏?如何解决? > > <mark>字节跳动:</mark> > > 三面:JVM 如何调优、参数怎么调? > > <mark>拼多多:</mark> > > 从 SQL、JVM、架构、数据库四个方面讲讲优化思路 > > <mark>京东:</mark> > > JVM 诊断调优工具用过哪些? > > 每秒几十万并发的秒杀系统为什么会频繁发生 GC? > > 日均百万级交易系统如何优化 JVM? > > 线上生产系统 OOM 如何监控及定位与解决? > > 高并发系统如何基于 G1 垃圾回收器优化性能? ## 1.2. 背景说明 **生产环境中的问题** - 生产环境发生了内存溢出该如何处理? - 生产环境应该给服务器分配多少内存合适? - 如何对垃圾回收器的性能进行调优? - 生产环境 CPU 负载飙高该如何处理? - 生产环境应该给应用分配多少线程合适? - 不加 log,如何确定请求是否执行了某一行代码? - 不加 log,如何实时查看某个方法的入参与返回值? **为什么要调优** - 防止出现 OOM - 解决 OOM - 减少 Full GC 出现的频率 **不同阶段的考虑** - 上线前 - 项目运行阶段 - 线上出现 OOM ## 1.3. 调优概述 **监控的依据** - 运行日志 - 异常堆栈 - GC 日志 - 线程快照 - 堆转储快照 **调优的大方向** - 合理地编写代码 - 充分并合理的使用硬件资源 - 合理地进行 JVM 调优 ## 1.4. 性能优化的步骤 **第 1 步:性能监控** - GC 频繁 - cpu load 过高 - OOM - 内存泄露 - 死锁 - 程序响应时间较长 **第 2 步:性能分析** - 打印 GC 日志,通过 GCviewer 或者 `http://gceasy.io` 来分析异常信息 - 灵活运用命令行工具、jstack、jmap、jinfo 等 - dump 出堆文件,使用内存分析工具分析文件 - 使用阿里 Arthas、jconsole、JVisualVM 来实时查看 JVM 状态 - jstack 查看堆栈信息 **第 3 步:性能调优** - 适当增加内存,根据业务背景选择垃圾回收器 - 优化代码,控制内存使用 - 增加机器,分散节点压力 - 合理设置线程池线程数量 - 使用中间件提高程序效率,比如缓存、消息队列等 - 其他…… ## 1.5. 性能评价/测试指标 **停顿时间(或响应时间)** 提交请求和返回该请求的响应之间使用的时间,一般比较关注平均响应时间。常用操作的响应时间列表: | 操作 | 响应时间 | | :---------------------------------- | :------- | | 打开一个站点 | 几秒 | | 数据库查询一条记录(有索引) | 十几毫秒 | | 机械磁盘一次寻址定位 | 4 毫秒 | | 从机械磁盘顺序读取 1M 数据 | 2 毫秒 | | 从 SSD 磁盘顺序读取 1M 数据 | 0.3 毫秒 | | 从远程分布式换成 Redis 读取一个数据 | 0.5 毫秒 | | 从内存读取 1M 数据 | 十几微妙 | | Java 程序本地方法调用 | 几微妙 | | 网络传输 2Kb 数据 | 1 微妙 | 在垃圾回收环节中: - 暂停时间:执行垃圾收集时,程序的工作线程被暂停的时间。 - -XX:MaxGCPauseMillis **吞吐量** - 对单位时间内完成的工作量(请求)的量度 - 在 GC 中:运行用户代码的事件占总运行时间的比例(总运行时间:程序的运行时间+内存回收的时间) - 吞吐量为 1-1/(1+n),其中-XX::GCTimeRatio=n **并发数** - 同一时刻,对服务器有实际交互的请求数 **内存占用** - Java 堆区所占的内存大小 **相互间的关系** 以高速公路通行状况为例 - 吞吐量:每天通过高速公路收费站的车辆的数据 - 并发数:高速公路上正在行驶的车辆的数目 - 响应时间:车速 <a style="display:none" target="_blank" href="https://mp.weixin.qq.com/s/_S1DD2JADnXvpexxaBwLLg" style="color:red; font-size:20px; font-weight:bold">继续收门徒,亲手带,月薪 4W 以下的可以来找我</a> ## 最新资料 1. <a href="https://mp.weixin.qq.com/s?__biz=MzkzOTI3Nzc0Mg==&mid=2247484964&idx=2&sn=c81bce2f26015ee0f9632ddc6c67df03&scene=21#wechat_redirect" target="_blank">尚硅谷 Java 学科全套教程(总 207.77GB)</a> 2. <a href="https://mp.weixin.qq.com/s?__biz=MzkwOTAyMTY2NA==&mid=2247484192&idx=1&sn=505f2faaa4cc911f553850667749bcbb&scene=21#wechat_redirect" target="_blank">2021 最新版 Java 微服务学习线路图 + 视频</a> 3. <a href="https://mp.weixin.qq.com/s?__biz=MzkwOTAyMTY2NA==&mid=2247484573&idx=1&sn=7f3d83892186c16c57bc0b99f03f1ffd&scene=21#wechat_redirect" target="_blank">阿里技术大佬整理的《Spring 学习笔记.pdf》</a> 4. <a href="https://mp.weixin.qq.com/s?__biz=MzkwOTAyMTY2NA==&mid=2247484544&idx=2&sn=c1dfe907cfaa5b9ae8e66fc247ccbe84&scene=21#wechat_redirect" target="_blank">阿里大佬的《MySQL 学习笔记高清.pdf》</a> 5. <a href="https://mp.weixin.qq.com/s?__biz=MzkwOTAyMTY2NA==&mid=2247485167&idx=1&sn=48d75c8e93e748235a3547f34921dfb7&scene=21#wechat_redirect" target="_blank">2021 版 java 高并发常见面试题汇总.pdf</a> 6. <a href="https://mp.weixin.qq.com/s?__biz=MzkwOTAyMTY2NA==&mid=2247485664&idx=1&sn=435f9f515a8f881642820d7790ad20ce&scene=21#wechat_redirect" target="_blank">Idea 快捷键大全.pdf</a> ![](https://itsoku.oss-cn-hangzhou.aliyuncs.com/itsoku/blog/article/1/2883e86e-3eff-404a-8943-0066e5e2b454.png)
#custom-toc-container