JMAP工具可以输出JAVA进程内存中所有对象情况,可以用来监控JAVA程序是否有内存泄露。
该命令使用方法:
jmap [ option ] pid
jmap [ option ] executable core
jmap [ option ] [server-id@]remote-hostname-or-IP
参数
option 参数是单一的,紧跟在命令后面。
pid 要被映射的进程。必须是java进程。
executable 产生核心转储的可执行java代码
core 要被映射的核心文件
remote-hostname-or-IP 远程调试服务器的域名或者ip地址(看jsadebugd)
server-id 可选唯一id,如果多个服务器运行在同一个远程主机
在java程序运行期间,在内存出现拐点的时候,dump内存,并建立内存数据文件。例如
jmap -dump:format=b,file=dump.txt pid ,使用前可以用jps获得JAVA进程列表,来查看JAVA进程的pid.
该命令执行后,会获取当前应用服务系统的占用内存并且保存在dump.txt文件中。
然后使用IBM HeapAnalyzer打开dump.txt文件,将会展现该dump文件中对象内存使用情况。
如果存在可疑内存泄露,将会以树形结构展现。通过分析占用堆内存比例找到占比最大的对象。
最后需要在程序中找到使用该对象的地方,再分析程序,确定产生内存泄漏的原因。