Java性能调优:利用JMC分析性能
Java性能调优作为大型分布式系统提供高性能服务的必修课,其重要性不言而喻。
好的分析工具能起到事半功倍的效果,利用分析利器JMC、JFR,可以实现性能问题的准确定位。
Java线上进程很多面临大堆内存,无法dump堆内存快照,如何解决这样的问题,就可以通过JMC结合JFR连接到线上进程做一段时间采集,分析java进程性能问题
本文主要阐述如何利用JMC分析系统性能
JMC:Java Mission Control
JFR:Java Flight Recorder
JMC:Java Mission Control
JMC打开性能日志后,主要包括7部分性能报告,分别是一般信息、内存、代码、线程、I/O、系统、事件。其中,内存、代码、线程及I/O是系统分析的主要部分,本文会重点进行阐述。
开启 JFR 收集: 由于JFR是商用的,所以需要解锁Java程序的商业feature: -XX:+UnlockCommercialFeatures -XX:+FlightRecorder --JDK 1.8u40之前版本,需再jvm启动前添加参数JDK 1.8u40之后版本,不需要在启动的时候通过flag来解锁了,可以动态的解锁jcmd 17206 VM.check_commercial_features动态解锁 后可以运行许JFR采集任务jcmd 17206 VM.unlock_commercial_features
检查 & 解锁 开启JFR 收集
JFR采集有两种方式: 固定时长的采集 持续不断的采集JFR采集策略 默认存储: /usr/local/jdk1.8.0_161/jre/lib/jfrdefault.jfc 默认配置-开销很低,适用于一直运行,不会影响Java程序的性能。性能开销低于1% profile.jfc 采集的事件力度更细(性能开销低于2%)JFR 采集实操: 假定 jvm pid是 17206 1.采集固定时长JFR任务--查看当前执行的 JFR 任务 jcmd 17206 JFR.check -- 采集 5min的 JFR任务(采集固定时长JFR任务) jcmd 17206 JFR.start name=zhibi_jfr_online_test1 settings=profile delay=5s duration=5m filename="/home/work/apache-tomcat-7.0.85/zhibi_jfr_online_test1.jfr" compress=true jcmd 17206 JFR.check2.持续不断的采集JFR任务持续采集 JFR 任务 jcmd 17206 JFR.start name=zhibi_jfr_test2 settings=profile delay=5s duration=0 compress=true -手动转存 jfr 文件 jcmd 17206 JFR.dump name=zhibi_jfr_test2 filename="/home/work/apache-tomcat-7.0.85/zhibi_jfr_test2.jfr" compress=true -停止持续采集 JFR 任务 jcmd 17206 JFR.stop name=zhibi_jfr_test2
定位jvm进程信息
查看当前执行的 JFR 任务
新建一个采集 5min的 JFR任务(采集固定时长JFR任务)
查看采集任务状态
# 生成jfr收集文件后可导入JMC进行可视化问题定位
打开效果试试看,主要分为以下部分: 标粗部分需重点关注 一般信息: jvm信息 & 系统属性 内存: 展示 内存占用(堆内+堆外)、GC原因、GC时间、对象分配可按类、线程展示 按对象占用大小排序 & 可直接查看占用较大对象线程堆栈信息-快速定位可能存在问题的代码逻辑、对象统计信息展示增长最快对象 代码: 类加载 / 类卸载 信息 线程: 概览cpu占用率 & 活跃线程数 & 守护线程数 、热点线程、争用阻塞 & 受阻塞线程、等待时间按等待时间排序线程、线程转储类似jstack功能、锁定实例定位死锁 I/O: 文件IO+网络IO 系统: 进程 & 环境变量信息 事件: 按照事件维度展示 系统 发生 事件-展示方式 日志、图形、堆栈、直方图
1.一般信息:
2.内存: 内存占用(堆内+堆外)、GC原因、GC时间、对象分配可按类、线程展示 按对象占用大小排序 & 可直接查看占用较大对象线程堆栈信息-快速定位可能存在问题的代码逻辑、对象统计信息展示增长最快对象
3.代码: 类加载、类卸载 信息 -重点关注
4.线程: 概览、热点线程、争用、等待时间、线程转储、锁定实例
5.I/O: 文件读取/写入 、 套接字读取/写入 -定位 IO 瓶颈(文件+网络) -重点关注
6.系统: 系统信息、 进程信息、环境变量信息
7.事件: 按照事件维度展示 系统 发生 事件-展示方式 日志、图形、堆栈、直方图
我是架构师kimze,喜欢我的文章欢迎关注我,
我会坚持分享干货: 互联网微服务架构、云原生架构、行业动态、经典案例、技术趋势,
有问题欢迎关注私信或评论区回复交流
-
- Win11安装VMware Workstation Pro,Centos,Xshell,Xftp图文教程(Linux学习必备)
-
编程 | 2023-02-24 21:36
-
- 全球首个云渗透测试认证专家课程发布!腾讯安全领衔编制
-
编程 | 2023-02-21 12:51
-
- JavaWeb day5 Tomcat配置及idea创建Maven-Tomcat项目
-
编程 | 2023-02-21 12:47
-
- C语言实例|使用C程序优雅地杀掉其它程序进程
-
编程 | 2023-02-21 00:15
-
- 腾讯云服务器快速部署ChilloutMix
-
编程 | 2023-02-21 00:08
-
- vscode远程开发使用SSH远程连接服务器的方法「内网穿透」
-
编程 | 2023-02-20 21:46
-
- springboot使用mybatis开启事务回滚
-
编程 | 2023-02-20 21:42
-
- git可视化工具Sourcetree使用全攻略(git冲突解决)
-
编程 | 2023-02-20 21:36
-
- Win11安装VMware Workstation Pro,Centos,Xshell,Xftp图文教程(Linux学习必备)
-
编程 | 2023-02-20 21:32
-
- 领英群发消息方法技巧
-
编程 | 2023-02-20 18:12
- 1Python之列表推导式最全汇总(上篇)
- 2Win11安装VMware Workstation Pro,Centos,Xshell,Xftp图文教程(Linux学习必备)
- 3springboot使用mybatis开启事务回滚
- 4windows2003 的安装及安装过程遇到的问题小结
- 5git可视化工具Sourcetree使用全攻略(git冲突解决)
- 6django+vue项目搭建实现前后端通信
- 7Redis 分片集群的实现
- 8springboot使用mybatis开启事务回滚
- 9GPU版本安装Pytorch的最新方法步骤
- 10Win11安装VMware Workstation Pro,Centos,Xshell,Xftp图文教程(Linux学习必备)
- 1 Win11安装VMware Workstation Pro,Centos,Xshell,Xftp图文教程(Linux学习必备)
- 2 Redis处理高并发之布隆过滤器详解
- 3 一文带你了解MySQL字符集和比较规则
- 4 MySQL常见内置函数以及其使用教程
- 5 解决Spring Cloud feign GET请求无法用实体传参的问题
- 6 Feign调用中的两种Header传参方式小结
- 7 yocto queue微型队列数据结构源码解读
- 8 Idea中如何查看SpringSecurity各Filter信息
- 9 arrify 转数组实现示例源码解析
- 10 Css-In-Js实现classNames库源码解读
-
264
全网最强下载神器IDM使用教程之利用IDM加速下载百度网盘大文件的方法
· -
218
MySQL如何查看正在运行的SQL详解
· -
198
关于yolov8训练的一些改动及注意事项
· -
150
chatgpt国内镜像 pycharm idea插件使用详解
· -
148
VS Code里使用Debugger for Unity插件调试的方法(2023最新版)
· -
125
全网最强下载神器IDM使用教程之利用IDM加速下载百度网盘大文件的方法
· -
117
JavaWeb day5 Tomcat配置及idea创建Maven-Tomcat项目
· -
103
buildcheck包报错问题排查解决
· -
97
vscode远程开发使用SSH远程连接服务器的方法「内网穿透」
· -
96
全网最强下载神器IDM使用教程之利用IDM加速下载百度网盘大文件的方法
·
网友评论