00:00
那刚才说的火焰图,如果你不是一三版本呢。你就这边给大家放了一个参考资料啊,那这个就是自己来做这个火焰图了。啊,瞅一眼吧。也是咱们以前经常做的一个方案。就是你去GI下面这个下载一下这个工具k vm profile,然后执行命令呢去做,然后再结合这个frame gra啊生成火焰图就行了。效果也是可以达到这种效果。那接下来咱们聊聊这个GC分析GC呢,相信这个方这个套路应该大家都比较熟悉的啊,不管是什么一样都一样,那这个GC呢,咱们就首先第一步要。打印它的GC日志,这个时候需要咱们在提交的时候指定一个J,呃,JM的一个参数啊,Print PCD,那对应的GC还有很多很多参数,但是这个是必须的啊,这个是必须的。
01:02
那我这边的案例是打的什么呢?打了一个是,呃,详细日志还有一个。时间啊,带时间格式的时间戳。行,那咱们把之前这个任务停了呗。接下来我拷贝。重新提交,让大家看看GC的日志。好,已经停掉了。注意啊,我刚才看火焰图没有重新提交,是因为我之前提交的时候已经你看给大家看我的历史命令。本身就是指定的这个参数的,我当时写的时候啊,当时执行的时候啊。
02:07
好了,废话少说,直接看一下UI。点开。那GC的日志在哪呢?大家觉得咱们关注的是旧本还是task美呢?其实是这样,比如说是map,你你你要看你想要的是什么,肯定是task manager对吧,另外那么多个哪一个才是呢?你点瓶颈算子,然后呢。呃,点一下task manager。这边是不是显示它所在的一些节点呢,对吧,它用到的节点你再去看好,那比如说咱们看一个呗,呃,看一个。这个吧。随便看一个点一下log跳过来,跳过来之后我们看看有没有GC的情况呢,在哪呢。这里就有std out。
03:02
对吧,你咱们做了打印了。咱们基于雅安的日志,你也不知道在哪,对吧,你可能没配好,你也不知道在哪,不用担心,这里它提供了一个贴心的功能。其实日志路径你可以看这里啊。呃,你看。其实默认在这里,如果你没设置的话,你看task的启动信息。配边是有的,农日志这里有。默认在这儿回头呢,还会被归集对吧?好了,这个不啰嗦了,那如果咱们之前也没设路径,那现在很简单。这里有一个什么下载点一下,然后再下载呢。我把它拷到桌面上去。好,这就是咱们下载下来的一个GC日志,那么接下来看一下能不能看懂啊。来这么多。
04:04
看不懂吗?也不是看不懂,有经验你就能看,但太费劲了,没必要,那这个时候咱们介绍一个工具叫g c viewer,当然工具有很多啊,咱们只是提出一个常用的而已,G c view,那这个很简单,这个呢,给到大家的这么一个。资料里面我放了一个炸包,这个炸包你可以去GIHUB上面下啊。这个架包的使用也比较简单,你看我现在在Windows下面对吧,双击。它就跳出一个什么,呃,带GUI的一个界面。那这个时候你可以选择打开,打开文件,呃,选择这个桌面。这个。打开。这边是不是看着就比较舒服了。对吧。你看一下他的情况。
05:02
内存情况。不都有啊。内存使用情况,那这个时候你就要重点关注的就是老年贷了。还有每次说负GC释放的大小啊等等什么的。这边。就是咱们怎么来用啊,那如果Linux也可以,呃,就咱服务器上也可以,你把这个刚才这个价包啊。啊,就就这个GCVI这个架上传,然后呢,执行这个高挖超干架,呃,GCVI啊。啊,一点什么什么什么,然后把你的log指定你的。是哪个哪个机器log这样的,你执行这个命令也能跳出一个图形化界面啊。都一样,那既然这方面你在这看就行了呗,对吧。看这里。那至于怎么好好的分析呢,咱们就不在这介绍工具了,你这个上百度一搜,比如说GCVR怎么看?
06:05
详细的还有怎么样。这个颜色。分别什么意思,还有它的一个波动情况。就行了。咱们其实。重点呢,就是关注一个复耳机C。那么这边呢,咱们重点关注啥呢?老年带的一个剩余大小。对吧,按照也是咱们常规的一个权威指南。呃,按照Java堆大小计算法则,咱们。假设负尔基C之后,老年带剩余的大小空间为M啊,这这个变量啊,我用M表适,那么整整体的咱们堆内存是多少合适呢?三到四倍。三到四倍。那么新生带也就具体的堆里面的划分,新生带也就是这个剩余大小M的一到1.5倍。老年代呢,就设为二到三倍,那这两个加起来不就是三到四倍嘛,是吧。
07:05
那这个都可以去指定,那前面的内存划分也给大家讲了,对象内存表示哪一些对吧?啊大家应该都明白,这个你就结合具体情况,这个真就是得具体情况具体分析。那如果还有一个事儿,就是什么呢?你发现说。剩余空间特别少,而是有内存泄露的可能,你这个时候是不是可以借助一些其他工具分析那个对象主要是谁呀,那个都是可以分析的,像IBM的工具啊,啊,还有什么什么的工具很多啊。那些工具,工具类的我就不再介绍。
我来说两句