线上内存溢出分析报告
java程序本身有自己的GC垃圾回收机制,一般我们在开发的时候,不需要关注垃圾回收等问题。但往往在实际开发过程中,有些代码运行一直占用内存不释放,从而导致我们的程序会出现内存溢出等情况。下面就实际线上遇到内存溢出做一次简单的分析报告:
1.线上问题
1.1 线上运行top
当我们线上运行这个top命令,发现此事Java占用CPU高达1200+%,一直不降,此事意识到我们的程序出问题了。打开我们的日志,发现如下:

从上面的日志,我们不难发现,内存溢出啦~
2.解决方案
2.1 程序添加堆栈记录
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/heapdump.hprof
java -Xms1024m -Xmx1024m -Dfile.encoding=utf-8 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/heapdump.hprof -jar 你jar的绝对路径/xx.jar server metaplexor.yml > /dev/null
重启启动服务,等待下一次的内存溢出,这

这篇博客详细记录了一次线上JAVA程序遇到的内存溢出问题及其分析过程。通过线上运行top命令发现内存溢出,然后通过设置JVM参数记录堆栈信息,并使用内存分析工具MAT对heapdump.hprof文件进行分析,找出问题代码——一个定时任务中的大数据查询。最后,优化查询限制每次只获取200条数据,成功解决了内存溢出的问题。
最低0.47元/天 解锁文章
2908

被折叠的 条评论
为什么被折叠?



