一日,线上产品跑着的,收到业务监控报警:某台应用服务器的JVM Heap打满,且HTTP请求超时无响应。
收到告警后,立即切流量,并登陆问题服务器,利用jmap和jstack保存现场,然后恢复问题服务器的服务:
上传到公司的JVM分析工具ZProfiler上进行分析,Heap 得到如下结果:
由此,估计可以从这个线程入手,到 Thread Dump 中查看:
通过线程栈,最终发现出问题原因:业务线程在执行一个查询数据库的操作,数据返回量太大,内存爆了,解决方法自然是在代码中限制数据返回量了。
工具分析得一步到位,其中发生了什么?如果没有这个工具,手工可以分析出来吗?答案是肯定的。
利用JHat对Heap文件进行分析。
13g的内存分析,一般的开发机可能会OOM。问了下同事他们的工具是怎么做到的,回复是用了 ,好吧!
对于大内存文件,哪种分析工具比较适合?
jhat 至少要花费5倍于原始heap dump文件大小的内存,先排除掉;
mat 至少占用相同于heap dump文件大小的内存;
JProfiler 界面好,响应快,可以做本地、远程进程的Attach,以及分析内存快照文件;
Yourkit Java Profiler 相对于 JProfiler 更适合远程分析;
下面是JProfiler的应用截图
领取专属 10元无门槛券
私享最新 技术干货