【深入理解Java虚拟机】第二期分享——性能监控与故障处理

龙哥手记 发表于 2022/05/06 17:01:54 2022/05/06
【摘要】 读书笔记

本文的内容主要有:

  1. JPS:虚拟机进程状况工具
  2. Jstat:虚拟机统计信息监视工具
  3. Jstack:Java堆栈跟踪工具
  4. Jmap:Java内存映像工具
  5. Jhat:虚拟机堆转储快照分析工具
  6. jconsole:Java监视与管理控制台
  7. visualvm:多和一故障处理工具

1 基础知识

如何设置环境变量path
image.png

Jps是JVM process status缩写,JDK小工具都参考uninx的命名方式,与PS命令相似可以列出虚拟机进程,并且显示虚拟机主类名称,唯一ID;其他小工具使用前要先得到虚拟机ID,才能监控是哪个虚拟机进程;对于本地虚拟机来说,当然通过启动了多个虚拟机进程,无法根据名称定位时,只能用JPS显示主类才能区分进程。

image.png
image.png
该代码启动一个线程每3秒打印一次hello,然后下面一直循环;目的是让这个进程一直都在,使用JPS,可以看到14680这个线程的IDimage.png
加-l参数,输出主类的全名,如果进程执行的是Jar包,输出Jar路径
image.png

image.png
Jstack用于生成当前虚拟机的线程快照,目的是找出线程长时间停顿原因,比如线程死锁,死循环,请求web资源导致长时间等待;JStack能查看该线程的调用堆栈,没有响应线程,在后台到底做什么。还是上面代码,用jstack 14680查看该线程堆栈。
image.png
该线程已经一直等待最后停掉

jstat是虚拟机统计信息监视工具

参数interval count分别代表间隔多少次,多少秒,如果省略这两个参数说明只查询一次。我们假设250ms,查询一次进程的垃圾收集情况,一共查了20次,就是如下命令:

jstat -gc pid 250ms 20

image.png

我们来看下代码,每次执行生成一个对象,共20次,间隔是50ms,最后执行一次GC意思是用下命令
image.png
结果如下
image.png
现在我们每隔20ms打印3次,如下所示
image.png

Jmap我们来看下内存映像工具,用于生成堆与转储快照,Jmap不仅仅是得到dump文件,还能查询堆以及永久代也就是方法区的详细信息,比如空间使用率,用的是那种收集器,除了demp文件能在windows下生成,其他命令需要在linux内使用
image.png
生成demp文件在项目依赖下已经生成,结果如下所示
image.png

Jhat是虚拟机堆转储快照分析工具,与Jmap搭配使用分析堆转储的快照,Jhat内置微型的HTTP服务器,生成DEMP文件可以在浏览器下查看,在实际工作如果实在没有其他工具才用Jhat工具分析demp文件,因为Jhat工具分析就比较简陋,
测试下,在服务器启动7000端口,如下所示
image.png

jconsole是Java监视与管理控制台,它是基于JMX的可视化管理平台
image.png
image.png
还有内存监控相当于Jstat命令,用于监视收集器管理虚拟机内存以及呈现变化趋势,程序运行后可以看到Edend内存区域变化趋势,如下;image.png

我们再换一个例子,这个代码启动了两个线程,一个是死循环线程,一个是加锁线程,先启动后连接 结果如下:
image.png
可以在下方看到很多线程,比如main线程,我们在终端输入1启动一个死循环线程,这个时候在下方可以看到线程列表,有一个testBustThread是Runable也就是在执行,我们再输入1启动死锁线程,这个时候testlock已经启动,但是它一直在等待锁的数据。
image.png
我们再来看死锁例子,线程A,B进行加锁,但是顺序不一致导致死锁
image.png
看到线程这边线程199,83,46互相死锁,199是在等待83的锁,46也是等待83的锁,但是84在等待46所以83与46相互形成死循环造成死锁
image.png

visualvm是多合一故障处理工具,直接点击jvisualvm.exe启动,这个只能在windows使用,这个可以安装很多插件,有些功能甚至比商业软件要好,而且它对程序性能影响很小,使得直接用在生产环境,我们还是看个例子
image.png
系统属性,JVM参数,还有监视,CPU使用,这边是堆的使用,还有些线程信息,还有就是类的信息
image.png
image.png
image.png

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。