美文网首页我爱编程
jvm工具链之jmap

jvm工具链之jmap

作者: 但时间也偷换概念 | 来源:发表于2018-06-10 16:44 被阅读0次

    简述

    命令jmap是一个多功能的命令。它可以生成 java 程序的 dump 文件, 也可以查看堆内对象示例的统计信息、查看 ClassLoader 的信息以及 finalizer 队列。

    实战

    笔者开发环境

    Macos(unix)

    jdk:1.8

    ide:IDEA

    jvm configuration:-Xms20m -Xmx20m -XX:NewSize=8m -XX:+UseConcMarkSweepGC -XX:+UseParNewGC

    在笔者zsh终端输入jmap,或者在linux和windows命令行输入jmap,将显示以上option介绍

    大概简述一下就是提供有各种option去实现各种功能,pid就是应用运行的进程id

    常用的大概就是heap hist:live dump clstats这几个option了

    举个栗子

    笔者写了个Hello.java

    然后运行main方法。

    首先是通过jps找到这个运行类的pid,jps也可以加option,可以显示具体类名等信息,这种方式只支持当前用户应用,也就是在unix权限里如果是别人的应用,你就老老实实用pgrep之类的吧,反正我都告诉你了。

    ok,找到了pid,下面来看看jmap能够做什么

    heap

    如上图,heap能够打印出jvm一些配置信息,如笔者这次运行的环境,就是Parnew+CMS收集器,然后堆是20M

    New Generation和Old Generation分别是8M和12M,并且能够看出以上是新生代分为eden区和两个survivor区(from to),那么老年代使用的是mark sweep标记清除算法。然后还可以看到一些基础配置(Heap configuration),比如新老晋升阀值,新老比例,G1回收器单个region大小等。并且每个区域使用内存情况也有显示。

    histo:live

    还是刚才那个demo,笔者手残停止了应用,重新来一次,换了个1080pid。

    可以看到histo:live打印的是存活状态对象的内存占用情况。

    一般来说有经验的调优者在遇到OOM的时候,可以从histo这里看到是否有明显的hashtable过多之类的代码问题。

    clstats

    这个就是类加载的信息展示了,像什么ApplicationClassLoader和ExtClassLoader,分别是应用层和第三方加载器,这个大家自己去深入理解java虚拟机里面具体学习了,不多介绍了,我这个样例没有准备解释BootStrap双亲委派 自定义加载等demo。

    dump

    命令:jmap -dump:format=b,file=heapdump.phrof pid

    描述:生成堆转储快照dump文件。

    dump就会生成到显示的目录里了。

    相关文章

      网友评论

        本文标题:jvm工具链之jmap

        本文链接:https://www.haomeiwen.com/subject/piafeftx.html