GC与CPU与内存的查看与分析
本文主要讲visualVM,MAT的下载配置;以及如何运用visualVM生成hprof文件;如何用visualVM分析CPU消耗,程序瓶颈在哪里;怎么用MAT导入hprof文件以及简单的查看,仅推荐刚刚接触GC的萌新食用,讲得不对的地方欢迎大佬指正
---------------------------------------------------------------------------------------------------------------------------
万能分割线--------------万能分割线--------------万能分割线--------------万能分割线--------------万能分割线----------
---------------------------------------------------------------------------------------------------------------------------
visualVM下载:
打开网址: https://visualvm.github.io/ 点击打开链接 这是visualVM下载地址,打开你会看到这个界面
点击下载,当然等你看到的时候可能不是这个版本了,不要慌,下最新的
因为博主用的windows所以直接下载的上面的zip文件,Mac用户下载下面那个
下载后你会得到这么一个压缩包,解压到本地
visualVM 获得
用法:
如果大吉大利的话你会得到这个视图
如果不幸你的VisualVM没有搜索到Eclipse,不要慌,博主也遇到了,我来教你佛系修复法----->
- eclipse打开,右下角如果提示你更新就打开它,更新,没有提示说明已经是最新版或者更新被关闭
- 在eclipse打开后重新打开VM刷新一下看看如果没有
- 重启电脑,打开eclipse,打开VM如果成功那么大吉大利如果没有
- 说明真的出现了问题,VM弹出的窗口有网站,你进入网站找到和自己情况相吻合的异常处理,根据他的描述以及其他博客的帮助解决
大吉大利的用户看这边:
VisualVM的使用:
跑待检测的应用,注意:不要让你的程序过快的停止,否则VM会捕捉不到,而且程序停止后相应的线程也会被回收
打开VM你会发现左栏多了一个在跑的程序,打开它你会看到这个程序的简介
在Monitor中你可以选择查看CPU,内存,类,线程的使用与运行情况:
右侧Perform GC是手动GC,也就是手动进行垃圾回收,因为博主将文件统统读进了List中所以几乎没有自动GC,你们在跑自己的程序时也许会有较多的GC次数
Heap Dump是生成一个当前dump的信息,待会我们要用它来生成hprof文件
Treads中专门查看线程的产生与注销,如果不是并发编程可以不用看
优化的重点来了--->通过CPU查看程序瓶颈在哪里
博主比较喜欢使用sampler,所以就主要讲解这个了
在sample中点击CPU
展开你会看到各个函数用的cpu时间
在下图你可以看到有一个东西叫做Self Time,这是个什么呢?,这个其实是这个函数的本身消耗的时间,还能有别的时间吗?当然有,那就是这个函数调用其它函数所消耗的时间,
分析下图我们可以看到博主的程序主要卡在Regular()函数本身的消耗,以及vertices()函数调用的add(),还有一部分是log占用的时间,要提升性能就只能通过这几个地方才能明显提升了
因为博主这个程序是已经优化过的,所以不能现场演示怎么调优了,之前这个函数是要跑四个多小时的,通过检查CPU的消耗,发现了程序瓶颈删减四五行代码后,运行时间缩短到了一分四十秒,并且结果没有错误,可见用这个工具是很有帮助的
Memory查看当前程序是谁在占用内存,可用于观察数据结构是否优良
Profiler:与sampler有异曲同工之妙
注意这个地方你要写清楚要观察的是什么类,Memory的设置也是一样的
打开这几个地方你就能观察到数据
snapshot: 当你程序终止进程关闭时VM会提示你要不要保存snapshot
这个与Profiler异曲同工,都是用来观察你程序的运行信息的
欸,我们是不是忘了什么,,,,,,,,好吧hprof文件到底怎么生成呢??
记得下面这个图不?
点击heap dump 你就会观察到下图
点击这个文件你就会看到"另存为"这个按钮变亮了
点一下你就会看到,竟然可以保存为hprof文件了,,,
hprof -----get
进入下一阶段--
--MAT的下载:
网址: http://www.eclipse.org/mat/ 点击打开链接
打开后你会发现下载位置藏在了这两个地方,随便点击一个打开
这么多版本,应有尽有啊,因为楼主是64位系统所以选择了64位的
同样的套路
压缩包get
解压,MAT get
打开它你就会看到下图
file->Open Heap Dump
找到刚刚保存的hprof文件打开它
选择leak->finish
恭喜你获得第一份内存分析报告.可喜可贺可喜可贺
如果有想要深入了解MAT的读者,可以到网上搜各种深入教程,这里我就不献丑啦
希望屏幕前(帅气)/(漂亮)的你可以为深夜发博的博主来一波素质三连(点赞,关注,666),祝大家都能跑出运行漂亮的程序啊---
---碎觉碎觉