JVM学习十二:JVM之性能监控工具
Posted pony1223
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JVM学习十二:JVM之性能监控工具相关的知识,希望对你有一定的参考价值。
前面我们学习了很多JVM相关的理论知识,那么本节将重点讲述的是工具的使用,正所谓:工欲善其事,必先利其器。因此,本节介绍常用的性能监控工具,用于性能监控和问题排查。
一、系统性能监控
系统性能工具用于确定系统运行的整体状态,基本定位问题所在。
Linux
– uptime
• 系统时间
• 运行时间
n 例子中为7分钟
• 连接数
n 每一个终端算一个连接
• 1,5,15分钟内的系统平均负载
n 运行队列中的平均进程数
– Top
• 第一行同uptime
• 第三行到第五行是CPU和内存的使用情况
• 图中下面的列表是每个进程使用CPU的情况
• 可以知道哪个程序占CPU最多
– vmstat
• 可以统计系统的CPU,内存,swap,io等情况
• 例子中的参数1为采样频率,4为采样次数
• 本例子说明CPU占用率很高,上下文切换频繁,说明系统有线程正在频繁切换
– pidstat
• 细致观察进程
• 需要安装
n sudo apt-get install sysstat
• 监控CPU
• 监控IO
• 监控内存
Windows
– 任务管理器
– Perfmon
Windows自带多功能性能监控工具
– pslist
n 命令行工具
n 可用于自动化数据收集
n 显示java程序的运行情况
二、JAVA自带工具
jps
–列出java进程,类似于ps命令
–参数-q可以指定jps只输出进程ID ,不输出类的短名称
–参数-m可以用于输出传递给Java进程(主函数)的参数
–参数-l可以用于输出主函数的完整路径
–参数-v可以显示传递给JVM的参数
jinfo
–可以用来查看正在运行的Java应用程序的扩展参数,甚至支持在运行时,修改部分参数
–-flag <name>:打印指定JVM的参数值
–-flag [+|-]<name>:设置指定JVM参数的布尔值
–-flag <name>=<value>:设置指定JVM参数的值
jmap
–生成Java应用程序的堆快照和对象的统计信息
–jmap -histo 2972 >c:s.txt
![技术分享图片](https://image.cha138.com/20210824/908615753787449cafe3215fda5d6aca.jpg)
Dump堆
jmap -dump:format=b,file=c:heap.hprof 2972
![技术分享图片](https://image.cha138.com/20210824/29c42abcec2b4a75a4c4ef183c01aad0.jpg)
![技术分享图片](https://image.cha138.com/20210824/5bfd1ef095734f718e4e5c6f14c9dbf0.jpg)
jstack
–打印线程dump
–-l 打印锁信息
–-m 打印java和native的帧信息
–-F 强制dump,当jstack没有响应时使用
jstack 120 >>C:a.txt
![技术分享图片](https://image.cha138.com/20210824/25c5963348f74f9b8d2ba8e87d5e4cce.jpg)
JConsole
–图形化监控工具
–可以查看Java应用程序的运行概况,监控堆信息、永久区使用情况、类加载情况等
![技术分享图片](https://image.cha138.com/20210824/2f1db391f9e74502a90f9c621c145c17.jpg)
Visual VM
–Visual VM是一个功能强大的多合一故障诊断和性能监控的可视化工具
性能监控:找到占用CPU时间最长的方法
![技术分享图片](https://image.cha138.com/20210824/24b93c14197e4840b7e9dfafc096e6b6.jpg)
三、实战分析
运行一程序ThreadBlockMain,期望输出Hello,World ,结果在程序运行后,程序卡死,没有预期输出。
![技术分享图片](https://image.cha138.com/20210824/b4bb2fe7bf034cb18b2b2a2114566032.jpg)
![技术分享图片](https://image.cha138.com/20210824/821ff93c992f4f3dad789ea308cb4e31.jpg)
Java程序HoldCPUMain运行后,发现占用CPU很高,希望能找到原因。
死锁
![技术分享图片](https://image.cha138.com/20210824/f244514cd5f6444e9f4574cd1a49efb4.jpg)
如何从jstack的输出中找出死锁
![技术分享图片](https://image.cha138.com/20210824/513bd4edfb204c90a6252cf3997b17ad.jpg)
输出最后的总结
![技术分享图片](https://image.cha138.com/20210824/a19df3af9dc347349c094ab831908bc7.jpg)
参考文献:
葛一鸣《深入JVM内核》视频学习
以上是关于JVM学习十二:JVM之性能监控工具的主要内容,如果未能解决你的问题,请参考以下文章
[系统性能优化实践]JVM进阶实战之监控工具(Prometheus)