我把两个java基础后台服务部署到服务器上之后,每天早上都会有一个服务宕掉,
发现是内存被被消耗光了。图片的显示是重启了之后的,还剩下可用的 9个G的你内存,接近服务宕的那会,可用内存是只剩下300多MB
我就每天都要自己去看一遍,然后再重启服务。
有什么办法可以比较好内存消耗排查问题呢?
推荐是用阿里巴巴的开源项目arthas,个人使用了感觉非常好。。。
项目地址是https://github.com/alibaba/arthas
配合jconsole、jvisualvm、jmap、jps、jstack、jhat、jstat这些使用可以很快找到原因。
https://www.cnblogs.com/anxiao/p/6796644.html?utm_source=itdadao&utm_medium=referral
还有xms设置的是初始化内存,2048的话有点大,持久代内存-XX:MaxPermSize设置2048也太大,占满所有内存。
这个是你代码中有内存泄漏了,你想一下在代码中,哪个地方使用了缓存,但是却只有不停的往里面加对象,却没有删除策略。比如某个全局的Map或list之类的。
java自带的jvisualvm可以查看,还有很多工具可以百度一下,都长得差不多,像你这种情况肯定是代码哪块写的有问题,导致内存中东西太多,比如一直给容器中添加数据却没有清除策略,再比如用递归不慎写成了死循环/或者其他方式写的死循环等等。。。
百度:eclipse mat 全名:eclipse mat - Eclipse Memory Analyzer Open Source Project
是一个内存分析工具,可以自动分析可能存在的内存泄露问题以及大对象。具体使用方法,百度一下教程很多的,我觉得你的问题,用这个工具就够了。自己dump一分镜像就可以分析。