尚硅谷-JVM-性能监控与调优篇(P302~P381)
第二篇字节码和类加载篇感觉用处不大,暂时跳过,直接开始性能监控和调优。但是是免费篇,讲的都是写工具、参数,实际案例比较少。
视频地址:
https://www.bilibili.com/video/BV1PJ411n7xZ?p=381&vd_source=510ec700814c4e5dc4c4fda8f06c10e8
🔥1.性能监控与调优篇
分为性能监控(发现问题)、分析(排查问题)和调优(解决问题):最终目的还是要减少GC次数,保证系统性能
1.1. 性能监控
1.1.1 命令行监控
1.1.1.1 jps
java process status
-- 查看Hotspot虚拟机中正在运行的进程: pid 进程名
C:\Users\EDY>jps
18736 Jps
26500 RemoteMavenServer36
14712 RemoteMavenServer36
21452 Launcher
39372
46956 Launcher
1.1.1.2 jstat
监视虚拟机中运行状态:类加载,内存,垃圾收集等运行数据
C:\Users\EDY>jstat -class 26500
Loaded Bytes Unloaded Bytes Time
5740 10533.0 25 25.2 2.23
1.1.1.3 jinfo
查看、调节虚拟机配置参数信息
--查看进程参数,也可以修改
C:\Users\EDY>jinfo -flags 42872
--增加参数
C:\Users\EDY>jinfo -flag +PrintGCDetails 42872
1.1.1.4 JVM默认值
--JVM启动默认值
C:\Users\EDY>java -XX:+PrintFlagsInitial >> 1.txt
--JVM最终默认值,可能程序会修改
C:\Users\EDY>java -XX:+PrintFlagsFinal >> 1.txt
1.1.1.5 Jmap
导出内存映像文件和内存使用情况
1.1.2 GUI界面
GUI算是对命令行的升级。分为JDK自带和第三方工具
1.1.2.1 Jconsole
1.1.2.1 JvisualVM
dump文件:分析某个时刻内存、类个数、对象个数等信息情况
抽样器:查看哪个线程占用CPU和内存过高的情况
.hprof:就是dump里面对象个数情况
浅堆:对象所消耗内存,不包含内部引用对象大小
深堆:只能通过一个对象直接或间接访问到所有对象的浅堆之和(比如A对象中有多个对象,对象下面还有对象,A中除去多个对象后的大小就是浅堆,整个A对象包含多个对象下面的对象就是深堆,)
实际对象大小:对象中所有对象之和
1.1.3 JProfile(略)
就是和idea整合的内存分析工具
1.1.4 Arthas(略)
1.2 性能分析
1.2.1 内存泄漏
1.2.1.1 static集合
长生命周期引用持有短生命周期对象导致不能被回收,就会导致内存泄漏
//statics生命周期和JVM一致, 程序结束之前不能被释放
static List list = new ArrayList();
public static void staticCollection(){
Object o = new Object();
list.add(o);
}
1.2.1.2 单例模式
单例对象持有外部对象引用
1.2.1.3 外部连接
数据库连接,网络连接,IO连接,连接完了之后要关闭
1.2.1.4 变量作用域
能用局部变量的不要用全局变量
1.2.1.5 hashCode值
set.add一个对象后再把这个对象属性修改add,就会有2个相同属性的对象(因为刚开始计算hashcode是一个值,修改属性就会重新计算hashcode,因为底层是map,map存储元素就是拿hashcode来计算的),前一个对象就会造成内存泄漏,所以对于集合存了元素后,就不要再修改元素里面值了,类似redis和mysql关系
1.3 性能调优
1.3.1 JVM参数设置(略)
第一篇讲了很多了,后面用到了在看。分为-X(稳定)与-XX(不怎么稳定)
1.3.2 GC日志分析(略)
1.4 个人小结
总结,总的来说,本章分为一些命令行监控、GUI监控、第三方工具监控、JVM参数设置和日志监控,来分析代码写的是不是有问题,服务器配置是不是不行之类的。
我曾七次鄙视自己的灵魂:
第一次,当它本可进取时,却故作谦卑;
第二次,当它在空虚时,用爱欲来填充;
第三次,在困难和容易之间,它选择了容易;
第四次,它犯了错,却借由别人也会犯错来宽慰自己;
第五次,它自由软弱,却把它认为是生命的坚韧;
第六次,当它鄙夷一张丑恶的嘴脸时,却不知那正是自己面具中的一副;
第七次,它侧身于生活的污泥中,虽不甘心,却又畏首畏尾。