java jmap 分析_Java常用分析工具之jmap

简介

jmap是JDK中提供的一个用来监视进程运行中的jvm物理内存的占用情况的工具。该进程内存内,所有对象的情况,例如产生了哪些对象,对象数量。当系统崩溃时,jmap 可以从core文件或进程中获得内存的具体匹配情况,包括Heap size, Perm size等。

使用jmap会影响线上运行的应用,所以尽量不要在线上执行此命令。如果想dump堆信息,可以使用gcore命令,比jmap -dump快。

使用

jmap的使用很简单,可以通过以下命令查看。

jmap -h

Usage:

jmap [option]

(to connect to running process)

jmap [option]

(to connect to a core file)

jmap [option] [server_id@]

(to connect to remote debug server)

.......

案例

查看堆heap占用情况

jmap -heap 90099

Attaching to process ID 90099, please wait...

Debugger attached successfully.

Server compiler detected.

JVM version is 24.71-b01

using thread-local object allocation.

Parallel GC with 4 thread(s) #垃圾回收的方式

Heap Configuration: #堆配置信息

MinHeapFreeRatio = 0

MaxHeapFreeRatio = 100

MaxHeapSize = 2147483648 (2048.0MB)

NewSize = 1310720 (1.25MB)

MaxNewSize = 17592186044415 MB

OldSize = 5439488 (5.1875MB)

NewRatio = 2

SurvivorRatio = 8

PermSize = 21757952 (20.75MB)

MaxPermSize = 85983232 (82.0MB)

G1HeapRegionSize = 0 (0.0MB)

Heap Usage:

PS Young Generation

Eden Space:

capacity = 34603008 (33.0MB)

used = 9773032 (9.320289611816406MB)

free = 24829976 (23.679710388183594MB)

28.24330185398911% used

From Space:

capacity = 5242880 (5.0MB)

used = 0 (0.0MB)

free = 5242880 (5.0MB)

0.0% used

To Space:

capacity = 5242880 (5.0MB)

used = 0 (0.0MB)

free = 5242880 (5.0MB)

0.0% used

PS Old Generation

capacity = 89128960 (85.0MB)

used = 0 (0.0MB)

free = 89128960 (85.0MB)

0.0% used

PS Perm Generation

capacity = 22020096 (21.0MB)

used = 2666808 (2.5432662963867188MB)

free = 19353288 (18.45673370361328MB)

12.110791887555804% used

677 interned Strings occupying 44048 bytes.

查看对象占用内存情况

$ jmap -histo:live 96176

num #instances #bytes class name

----------------------------------------------

1: 5948 766656

2: 5948 679168

3: 401 474448

4: 365 289664

5: 401 276112

6: 562 93176 [B

7: 900 86256 [C

8: 463 45328 java.lang.Class

9: 653 43216 [[I

10: 608 37144 [S

11: 45 24480

输出内容的一些说明:

[C is a char[]

[S is a short[]

[I is a int[]

[B is a byte[]

[[I is a int[][]

上面的输出中[C对象占用Heap这么多,往往跟String有关,String其内部使用final char[]数组来保存数据的。

constMethodKlass/ methodKlass/ constantPoolKlass/ constantPoolCacheKlass/ instanceKlassKlass/ methodDataKlass

与Classloader相关,常驻与Perm区。

导出堆信息

可以使用jmap把堆信息导出,并使用可视化工具mat分析。导出的命令如下:

$ jmap -dump:format=b,file=a.dmp 96185

Dumping heap to /Users/canglong/dev/test/a.dmp ...

Heap dump file created

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值