项目在测试环境运行一段两天后,会出现OutOfMemoryError: Java heap space 的错误,导致程序崩溃停止
遇到这种错误,往往很难知道是哪里出错,我去年有记录定位OOM的问题的文章,刚好重温一下:线上java.lang.OutOfMemoryError问题定位三板斧
先不着急重启,先看看内存情况:
- top 查看java运行的pid
- jmap -heap pid 查看内存占用情况,新生代和eden区确实是用了100%
- jmap -histo:live pid| more 查看最大对象,发现是[C] 最大,也就是char
可是这样还是不知道哪里出了问题,因为程序用到字符的特别多,这里就需要更精细的定位工具,我用的是mat
- 到官网下载最新的mat
- 获取项目运行的heap_dump文件
- 在本地导进heap_dump文件分析定位,查找内存泄露的地方