惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Hugging Face - Blog
Hugging Face - Blog
云风的 BLOG
云风的 BLOG
大猫的无限游戏
大猫的无限游戏
M
MIT News - Artificial intelligence
L
LangChain Blog
阮一峰的网络日志
阮一峰的网络日志
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Recent Announcements
Recent Announcements
IT之家
IT之家
Google DeepMind News
Google DeepMind News
罗磊的独立博客
爱范儿
爱范儿
Last Week in AI
Last Week in AI
人人都是产品经理
人人都是产品经理
U
Unit 42
MongoDB | Blog
MongoDB | Blog
S
SegmentFault 最新的问题
B
Blog
博客园 - 叶小钗
月光博客
月光博客
Stack Overflow Blog
Stack Overflow Blog
V
Visual Studio Blog
C
Check Point Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知

博客园 - 长风破浪

BitMap的原理以及运用 Linux进程调度策略的发展和演变(转) Linux进程状态 可达性分析算法-确定那些对象是垃圾(转) 点评阿里JAVA手册之MySQL数据库 (建表规约、索引规约、SQL语句、ORM映射) 点评阿里JAVA手册之异常日志(异常处理 日志规约 ) 点评阿里JAVA手册之编程规约(OOP 规约 、集合处理 、并发处理 、其他) 点评阿里JAVA手册之编程规约(命名风格、常量定义、代码风格、控制语句、注释规约) JVM 规范 linux lsof命令详解 常用的Redis客户端的并发模型(转) tomcat在linux下自启动 谈谈互联网后端基础设施(转) linux下tomcat自启动设置 linux下tomcat安全配置 Linux下三个密码生成工具 禁止root用户远程登录 servlet/filter/listener/interceptor区别与联系 linux top命令查看内存及多核CPU的使用讲述
通过jmap查看jvm采用的垃圾收集器
长风破浪 · 2017-06-01 · via 博客园 - 长风破浪

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[][]