







命令:!dumpheap -stat 说明:分类别显示内存占用情况

上图最后的String占用3.6G,需要分析一下,MT是:7ffdde4bd698
命令:!dumpheap -mt 7ffdde4bd698 -stat 说明:看看3.6G是由多少个对象持有

200万个对象,那就不能执行:!dumpheap -mt 7ffdde4bd698 ,需要指定最小的尺寸,看看有没有大的
命令:!dumpheap -mt 7ffdde4bd698 -min 100000 说明:列出大于100K的对象

有9708个,占用3.4G,就是大部分占用在这个区间。而最后一个占用695M的文本。看看谁持有
命令:!gcroot 015a39d41020 说明:检查垃圾回收的情况。谁持有该对象,如果没有持有者,那应该过一段时间会被回收。

这个提示就很足了,具体程序位置也给出了。不过我们可能还是好奇,能否看看这String是什么内容,如果知道就更容易定位问题了。
命令:!dumpobj 015a39d41020 说明:查看地址内容

String提示:<String is invalid or too large to print>,没有显示我们期待的字符串。我们需要使用另一个命令。_firstChar提示了偏移量是c,需要地址加 c 或 0xc (16进制)
命令:du 015a39d41020+0xc L100 说明:取某个地址上长度100字节并转为字符

好了,原来是数据库连不上,有多少行数据就会写入多少条错误,难怪这么大的文本。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。