java应用排错处理
一、应用程序手动导出dump文件
jmap -dump:format=b,file=文件名 [pid]
如
jmap -dump:format=b,file=d:/fullGc.hprof 123456
format=b,表示以字节的形式
[pid],可以通过如下方式查看
ps -ef|grep java
或者
jps -m
或者通过top命令查看
top
top命令的操作,请查看底部参考文档。
遇到问题1:
-bash: jmap: command not found”
解决方式:
注:如果要使用jmap,必须保证虚拟机中已经安装了java-1.8.0-openjdk-devel-debug或java-1.7.0-openjdk-devel-debug或java-1.6.0-openjdk-devel-debug,但是Contos中默认是没有安装的,因此需要先安装openjdk-devel-debug。
安装openjdk-devel-debug
yum install -y java-1.8.0-openjdk-devel-debug
安装jmap
yum -y whatprovides '*/jmap'
执行命令后,从打印的日志中找到java-1.8.0-openjdk-devel-debug-1.8.0.191.b12-1.el7_6.x86_64(通常是最后一个)
再次执行进行验证:
# jmap
如果有提示信息显示,则安装成功。
二、配置应用程序自动导出dump文件
1.自动生成 heap dump文件
当OutOfMemoryError发生时,自动生成 heap dump文件的方法,输出到指定的路径d:/aa.hprof
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=d:/aa.hprof
2.执行 FullGC 前执行dump
当 JVM 执行 FullGC 前执行 dump
-XX:+HeapDumpBeforeFullGC
3. 行 FullGC 后执行dump
-XX:+HeapDumpAfterFullGC
4、内存消耗查看dump
jmap -histo:live pid >> 文件名
如:
jmap -histo:live 16900 >> d:/histoLive.hprof
三、分析
导出dump文件,然后使用jdk自带的jvisualvm工具,把文件导进去进行分析,依次执行
文件 》 装入 》 选中文件.. 即可。
注意:
JVM 生成 Heap Dump 的时候,虚拟机是暂停一切服务的。如果是线上系统执行 Heap Dump 时需要注意。
参考文档:
1、https://www.pianshen.com/article/7484337559/
2、https://blog.csdn.net/dhj199181/article/details/108504982
3、https://www.cnblogs.com/wangchen07026/p/7650688.html
4、https://www.cnblogs.com/niuben/p/12017242.html
学习笔记,老规矩,联系作者侵删。