java内存查看与分析出处:多特软件站时间:2011-04-26人气:981我要提问我来说两句核心提示:其实java自己就提供了很多内存监控的小工具,下面列举的工具只是一小部分,仔细研究下jdk的工具。业界有很多强大的javaprofile的工具,比如Jporfiler,yourkit,这些收费的东西我就不想说了,想说的是,其实java自己就提供了很多内存监控的小工具,下面列举的工具只是一小部分,仔细研究下jdk的工具,还是蛮有意思的呢:)1:gc日志输出在jvm启动参数中加入-XX:+PrintGC-XX:+PrintGCDetails-XX:+PrintGCTimestamps-XX:+PrintGCApplicationStopedTime,jvm将会按照这些参数顺序输出gc概要信息,详细信息,gc时间信息,gc造成的应用暂停时间。如果在刚才的参数后面加入参数-Xloggc:文件路径,gc信息将会输出到指定的文件中。其他参数还有-verbose:gc和-XX:+PrintTenuringDistribution等。2:jconsolejconsole是jdk自带的一个内存分析工具,它提供了图形界面。可以查看到被监控的jvm的内存信息,线程信息,类加载信息,MBean信息。jconsole位于jdk目录下的bin目录,,,jconsole可以监控本地应用,也可以监控远程应用。要监控本地应用,执行jconsolepid,pid就是运行的java进程id,如果不带上pid参数,则执行jconsole命令后,会看到一个对话框弹出,上面列出了本地的java进程,可以选择一个进行监控。如果要远程监控,则要在远程服务器的jvm参数里加入一些东西,因为jconsole的远程监控基于jmx的,关于jconsole详细用法,请见专门介绍jconsle的文章,我也会在博客里专门详细介绍jconsole。3:jviusalvm在JDK6update7之后,jdk推出了另外一个工具:jvisualvm,java可视化虚拟机,它不但提供了jconsole类似的功能,还提供了jvm内存和cpu实时诊断,还有手动dump出jvm内存情况,手动执行gc。和jconsole一样,运行jviusalvm,在jdk的bin目录下执行jviusalvm,,。4:jmapjmap是jdk自带的jvm内存分析的工具,位于jdk的bin目录。:Usage:jmap-histo<pid>(toconnecttorunningprocessandprinthistogramofjavaobjectheapjmap-dump:<dump-options><pid>(toconnecttorunningprocessanddumpjavaheap)dump-options:format=bbinarydefaultfile=<file>dumpheapto<file>Example:jmap-dump:format=b,file=<pid>jmap-histo<pid>在屏幕上显示出指定pid的jvm内存状况。以我本机为例,执行该命令,屏幕显示:num#instances#bytesclassname----------------------------------------------1:242062791864<constMethodKlass>2:223712145216[C3:242061940648<methodKlass>4:**********<constantPoolKlass>5:265431282560<symbolKlass>6:63771081744[B7:1793909688<constantPoolCacheKlass>8:1471614624<instanceKlassKlass>9:**********[;10:3863513640[I11:2067749624812:3621312776[;13:333526680014:825626419215:706622611216:2355173304[S17:168716195218:2769150112[[I19:356314252020:5562133488Total239019为了方便查看,我删掉了一些行。从上面的信息很容易看出,#instance指的是对象数量,#bytes指的是这些对象占用的内存大小,classname指的是对象类型。再看jmap的dump
java2 来自淘豆网m.daumloan.com转载请标明出处.