一、前言
- 个人主页: ζ小菜鸡
- 大家好我是ζ小菜鸡,小伙伴,让我们一起来学习如何排查内存溢出问题。
- 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)
二、如何识别
1.当前常见的内存溢出分类
- java.lang.OutOfMemoryError:Java heap space
- java.lang.OutOfMemoryError
- java.lang.OutOfMemoryError:Metaspace
2.内存溢出已出现
- tomcat,es 日志中能看到上面的报错信息。
3.内存溢出出现的路上
- jstat是一种分析方法,通过他可以监控当前jvm的内存使用及gc信息,猜测是否存在内存溢出风险。
三、如何定位
1.内存溢出已出现
- 尝试通过jmap命令抓一下内存
- 成功抓出内存,用MenoryAnalyzer工具分析一下内存,定位内存溢出原因。
- 没有成功抓出内存,重启服务,通过jstat命令观测,在内存溢出之前抓内存,然后用MenoryAnalyzer工具分析一下内存,定位内存溢出原因。
2.内存溢出出现的路上
-
常用方法一:
- jstat命令观测,在内存溢出之前抓内存,然后用MenoryAnalyzer工具分析一下内存,定位内存溢出原因。
-
待验证方法二:
- arthas,没有实战过内存溢出,可以研究一下。
四、如何解决
1.内存真不够用
- 程序没有问题,根据业务需求,没有设置合理的内存。就需要增大内存来保证功能可用。
2.程序真有问题
- 程序存在内存使用不合理,导致内存溢出,MenoryAnalyzer分析出来具体的问题,修复代码问题。
五、相关技能
- jvm8内存模型
- jstat命令
- jmap命令
- MenoryAnalyzer工具
- arthas工具