当前位置:网站首页>尚硅谷-JVM-性能监控与调优篇(P302~P381)
尚硅谷-JVM-性能监控与调优篇(P302~P381)
2022-08-05 11:51:00 【胡宇乔】
第二篇字节码和类加载篇感觉用处不大,暂时跳过,直接开始性能监控和调优。但是是免费篇,讲的都是写工具、参数,实际案例比较少。
视频地址:
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参数设置和日志监控,来分析代码写的是不是有问题,服务器配置是不是不行之类的。
边栏推荐
- 【着色器实现Flicker“DJ”闪烁效果_Shader效果第十五篇】
- WingIDE 7.2.0 远程调试
- 2-2.基金的投资交易与结算
- 详细剖析 Redis 三种集群策略
- 2022 CCF国际AIOps挑战赛决赛暨AIOps研讨会报名已开启
- 力扣330 按要求补齐数组(贪心)
- Apache APISIX Ingress v1.5-rc1 发布
- nyoj757 期末考试 (优先队列)
- Five reasons why developers choose Klocwork, a static analysis tool for code quality, for software security
- 互联网行业凛冬之至,BATM的程序员是如何应对中年危机的?
猜你喜欢

详细剖析 Redis 三种集群策略

Gray value and thermal imaging understanding

祝所有码农七夕快乐~

莅临GOPS大会龙智展位,获取Forrester最新报告:《Forrester Wave:2021年第四季度企业服务管理报告》

LeetCode刷题(8)

Machine Learning - Logistic Regression

Exploration and practice of transaction link under multi-service mode

深度学习(四)分析问题与调参 理论部分

Introduction to the Evolution of Data Governance System

五大理由告诉你为什么开发人员选择代码质量静态分析工具Klocwork来实现软件安全
随机推荐
Introduction to the Evolution of Data Governance System
LeetCode brush questions (8)
安装tldr
广告电商系统
字节秋招二面把我干懵了,问我SYN报文什么情况下会被丢弃?
WPF开发随笔收录-WriteableBitmap绘制高性能曲线图
【7.29-8.5】写作社区精彩技术博文回顾
查询优化(TTFB过长)left join索引未生效
623. 在二叉树中增加一行 : 简单二叉树遍历运用题
Web3 中的安全问题和防范
碘乙酰胺在Desthiobiotin-Iodoacetamide试剂中的作用?
2022 极术通讯-基于安谋科技 “星辰” STAR-MC1的灵动MM32F2570开发板深度评测
Go 语言 strings 库常用方法
UDP communication
Qt::qcustomplot 和 qchart数据填充相关
isn't it?Is there anyone who can't locate the slow query problem of MySQL online?
后缀自动机(SAM)——黑盒使用方案
hdu 1870 愚人节的礼物 (栈)
How to write a blog with Golang - Milu.blog development summary
学习用于视觉跟踪的深度紧凑图像表示