zoukankan      html  css  js  c++  java
  • 通过jmap查看jvm采用的垃圾收集器

    1  tomcat PID获得

     ps -ef|grep tomcat

        

    1 [root@iZ2zeapch8kbaw4bxnz8vxZ tomcat7]# ps -ef|grep tomcat
    2 root     13296     1  0 10:35 pts/1    00:00:00 /usr/sbin/cronolog /usr/local/tomcat7/logs/catalina.%Y-%m-%d.out
    3 root     13297 13295 87 10:35 pts/1    00:00:12 /usr/local/jdk1.8.0_77/bin/java -Djava.util.logging.config.file=/usr/local/tomcat7/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Xms1024m -Xmx1024m -Xss512K -XX:+UseConcMarkSweepGC -Djdk.tls.ephemeralDHKeySize=2048 -Djava.endorsed.dirs=/usr/local/tomcat7/endorsed -classpath /usr/local/tomcat7/bin/bootstrap.jar:/usr/local/tomcat7/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat7 -Dcatalina.home=/usr/local/tomcat7 -Djava.io.tmpdir=/usr/local/tomcat7/temp org.apache.catalina.startup.Bootstrap start
    4 root     13434 12792  0 10:35 pts/1    00:00:00 grep tomcat

    2 查看java垃圾收集器 jmap -heap pid

        其中 using thread-local object allocation下面就是采用的java垃圾收集器

       下图事例中为:Concurrent Mark-Sweep GC

    [root@iZ2zeapchxZ tomcat7]# jmap -heap 13297
    Attaching to process ID 13297, please wait...
    Debugger attached successfully.
    Server compiler detected.
    JVM version is 25.77-b03
    
    using parallel threads in the new generation.
    using thread-local object allocation.
    Concurrent Mark-Sweep GC
    
    Heap Configuration:
       MinHeapFreeRatio         = 40
       MaxHeapFreeRatio         = 70
       MaxHeapSize              = 1073741824 (1024.0MB)
       NewSize                  = 87228416 (83.1875MB)
       MaxNewSize               = 87228416 (83.1875MB)
       OldSize                  = 986513408 (940.8125MB)
       NewRatio                 = 2
       SurvivorRatio            = 8
       MetaspaceSize            = 21807104 (20.796875MB)
       CompressedClassSpaceSize = 1073741824 (1024.0MB)
       MaxMetaspaceSize         = 17592186044415 MB
       G1HeapRegionSize         = 0 (0.0MB)
    
    Heap Usage:
    New Generation (Eden + 1 Survivor Space):
       capacity = 78512128 (74.875MB)
       used     = 17016048 (16.227767944335938MB)
       free     = 61496080 (58.64723205566406MB)
       21.673145835507096% used
    Eden Space:
       capacity = 69795840 (66.5625MB)
       used     = 10923608 (10.417564392089844MB)
       free     = 58872232 (56.144935607910156MB)
       15.650800964642018% used
    From Space:
       capacity = 8716288 (8.3125MB)
       used     = 6092440 (5.810203552246094MB)
       free     = 2623848 (2.5022964477539062MB)
       69.89718559093045% used
    To Space:
       capacity = 8716288 (8.3125MB)
       used     = 0 (0.0MB)
       free     = 8716288 (8.3125MB)
       0.0% used
    concurrent mark-sweep generation:
       capacity = 986513408 (940.8125MB)
       used     = 41311272 (39.397499084472656MB)
       free     = 945202136 (901.4150009155273MB)
       4.187603702594583% used
    
    19916 interned Strings occupying 2422360 bytes.
    

      Concurrent Mark-Sweep GC :CMS回收器

         Mark Sweep Compact GC:    串行GC(Serial GC)

         Parallel GC with 2 thread(s): 并行GC(ParNew)

        如何修改GC回收器: 设置 JAVA_OPTS

    3JMAP介绍

    打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数量)。

    可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成文本。使用方法 jmap -histo pid。如果连用SHELL jmap -histo pid>a.log可以将其保存到文本中去,在一段时间后,使用文本对比工具,可以对比出GC回收了哪些对象。jmap -dump:format=b,file=outfile 3024可以将3024进程的内存heap输出出来到outfile文件里,再配合MAT(内存分析工具(Memory Analysis Tool),使用参见:http://blog.csdn.net/fenglibing/archive/2011/04/02/6298326.aspx)或与jhat (Java Heap Analysis Tool)一起使用,能够以图像的形式直观的展示当前内存是否有问题。

    64位机上使用需要使用如下方式:

    jmap -J-d64 -heap pid

    2、命令格式

    SYNOPSIS

           jmap [ option ] pid

           jmap [ option ] executable core

           jmap [ option ] [server-id@]remote-hostname-or-IP

    3、参数说明

    1)options 

    executable Java executable from which the core dump was produced.

    (可能是产生core dumpjava可执行程序)

    core 将被打印信息的core dump文件

    remote-hostname-or-IP 远程debug服务的主机名或ip

    server-id 唯一id,假如一台主机上多个远程debug服务 

    2)、基本参数:

    -dump:[live,]format=b,file=<filename> 使用hprof二进制形式,输出jvmheap内容到文件=. live子选项是可选的,假如指定live选项,那么只输出活的对象到文件

    -finalizerinfo 打印正等候回收的对象的信息.

    -heap 打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况.

    -histo[:live] 打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上前缀”*如果live子参数加上后,只统计活的对象数量

    -permstat 打印classloadjvm heap长久层的信息包含每个classloader的名字,活泼性,地址,classloader和加载的class数量另外,内部String的数量和占用内存数也会打印出来

    -F 强迫.pid没有相应的时候使用-dump或者-histo参数在这个模式下,live子参数无效

    -h | -help 打印辅助信息 

    -J 传递参数给jmap启动的jvm. 

    pid 需要被打印配相信息的java进程id,可以用jps查问.

    4、使用示例

       jmap -histo 4939

    [输出较多这里不贴了]

    2jmap -dump:format=b,file=test.bin 4939

    Dumping heap to /home/fenglb/test.bin ...

    Heap dump file created

    4   jmap -histo pid|head -n 30

      

     num     #instances         #bytes  class name
    ----------------------------------------------
       1:        117098      170232696  [B
       2:        204755      121325072  [I
       3:        651042       82624448  [C
       4:        414175        9940200  java.lang.String
       5:        141560        8732760  [Ljava.lang.Object;
       6:         40748        3585824  java.lang.reflect.Method
       7:         78318        2506176  java.util.HashMap$Node
       8:         30303        2477016  [S
       9:         21451        1962016  [Ljava.util.HashMap$Node;
      10:         54391        1855488  [Ljava.lang.String;
      11:         23772        1521408  java.util.regex.Matcher
      12:         53136        1275264  java.util.ArrayList
      13:         29266        1170640  java.util.LinkedHashMap$Entry
      14:         23997        1151856  java.util.StringTokenizer
      15:         34861        1115552  java.awt.Color
      16:         31430        1005760  java.lang.ref.WeakReference
      17:         17900        1002400  org.apache.jasper.compiler.Mark
      18:         41636         999264  java.lang.StringBuilder
      19:         30441         974112  java.util.concurrent.ConcurrentHashMap$Node
      20:         19761         948528  java.util.HashMap
      21:          8217         931240  java.lang.Class
      22:         41439         892720  [Ljava.lang.Class;
      23:         13799         772744  java.util.LinkedHashMap
      24:         10456         752832  java.util.regex.Pattern
      25:          9480         682560  org.eclipse.jdt.internal.compiler.flow.UnconditionalFlowInfo
      26:         19754         632128  java.util.Stack
      27:         14611         621080  [[C
    

      其中:

    [C is a char[]
    [S is a short[]
    [I is a int[]
    [B is a byte[]
    [[I is a int[][]

  • 相关阅读:
    RPC的入门
    Https的实现原理
    Celery
    Flask信号
    Redis安装
    python之递归
    python之三元表达式和生成式
    python第十八天作业
    python之生成器
    python之迭代器
  • 原文地址:https://www.cnblogs.com/dragonsuc/p/6927824.html
Copyright © 2011-2022 走看看