jConsole,jvisualvm和jmap使用
JConsole
JConsole 是一个内置 Java 性能分析器,可以从命令行或在 GUI shell 中运行。可以轻松地使用 JConsole来监控 Java 应用程序性能和跟踪 Java 中的代码。
1- 启动
使 JDK 在 PATH 上,从命令行启动,运行 jconsole
2- 连接
2.1- 本地连接
2.2- 远程连接
无认证连接设置
|
1
2
3
4
|
-Dcom.sun.management.jmxremote-Dcom.sun.management.jmxremote.port=8888-Dcom.sun.management.jmxremote.authenticate=false-Dcom.sun.management.jmxremote.ssl=false |
图示如下

还有一种启动方式:jconsole.exe 192.168.3.228:8888
3- 性能分析
3.1- 概述: Displays overview information about the Java VM and monitored values.

对着图点击右键可以保存数据到CSV文件,以后可以使用其他工具来分析这些数据。
3.2- 内存: 显示内存使用信息
查看堆内存,非堆内存,内存池的状况总体内存的分配和使用情况以及不同的GC进行垃圾回收的次数和时间。
3.3- 线程: 显示线程使用信息
3.4- 类: 显示类装载信息
3.5- VM摘要: 显示java VM信息
3.6- MBeans: 显示 MBeans
jvisualvm
升级版的jConsole。
从命令行启动,运行 jvisualvm 。

jmap
用来显示Java进程的内存映射。
1-默认视图
查看连接到进程里的本地类库。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
[xinli@192 ~]$ jmap 26001Attaching to process ID 26001, please wait...Debugger attached successfully.Server compiler detected.JVM version is 17.0-b160x00683000 139K /lib/ld-2.12.so0x006a9000 1845K /lib/libc-2.12.so0x0083d000 197K /lib/libm-2.12.so0x00869000 19K /lib/libdl-2.12.so0x00870000 130K /lib/libpthread-2.12.so0x008a3000 40K /lib/librt-2.12.so0x04103000 113K /lib/libnsl-2.12.so0x08048000 46K /usr/java/jdk1.6.0_21/bin/java0x4ef5f000 36K /usr/java/jdk1.6.0_21/jre/lib/i386/libnio.so0x53402000 4K /usr/java/jdk1.6.0_21/jre/lib/i386/librmi.so0xb6c09000 93K /usr/java/jdk1.6.0_21/jre/lib/i386/libnet.so0xb6c1d000 33K /usr/java/jdk1.6.0_21/jre/lib/i386/libmanagement.so0xb6c75000 57K /lib/libnss_files-2.12.so0xb6c86000 74K /usr/java/jdk1.6.0_21/jre/lib/i386/libzip.so0xb6c9f000 184K /usr/java/jdk1.6.0_21/jre/lib/i386/libjava.so0xb6d15000 9452K /usr/java/jdk1.6.0_21/jre/lib/i386/server/libjvm.so0xb78b5000 37K /usr/java/jdk1.6.0_21/jre/lib/i386/jli/libjli.so0xb78c5000 37K /usr/java/jdk1.6.0_21/jre/lib/i386/native_threads/libhpi.so0xb78ce000 55K /usr/java/jdk1.6.0_21/jre/lib/i386/libverify.so[xinli@192 ~]$ |
2-堆视图
堆大小是年轻代、年老代加上PermGen区总和。年轻代内部有伊甸园和幸存者乐园。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
[xinli@192 ~]$ jmap -heap 26001Attaching to process ID 26001, please wait...Debugger attached successfully.Server compiler detected.JVM version is 17.0-b16using thread-local object allocation.Parallel GC with 2 thread(s)Heap Configuration: MinHeapFreeRatio = 40 MaxHeapFreeRatio = 70 MaxHeapSize = 1073741824 (1024.0MB) NewSize = 1048576 (1.0MB) MaxNewSize = 4294901760 (4095.9375MB) OldSize = 4194304 (4.0MB) NewRatio = 2 SurvivorRatio = 8 PermSize = 16777216 (16.0MB) MaxPermSize = 536870912 (512.0MB)Heap Usage:PS Young GenerationEden Space: capacity = 266665984 (254.3125MB) used = 219310160 (209.1504669189453MB) free = 47355824 (45.16203308105469MB) 82.24152053829258% usedFrom Space: capacity = 34734080 (33.125MB) used = 34713344 (33.105224609375MB) free = 20736 (0.019775390625MB) 99.94030070754717% usedTo Space: capacity = 46268416 (44.125MB) used = 0 (0.0MB) free = 46268416 (44.125MB) 0.0% usedPS Old Generation capacity = 715849728 (682.6875MB) used = 591219088 (563.8304595947266MB) free = 124630640 (118.85704040527344MB) 82.58983203804472% usedPS Perm Generation capacity = 123863040 (118.125MB) used = 122851872 (117.16067504882812MB) free = 1011168 (0.964324951171875MB) 99.18364025297619% used[xinli@192 ~]$ |
以上信息看不到堆内的信息,要知道内存都到哪了去了,就得使用柱状视图。
3-柱状视图
jmap使用类型内部名称。如:字符数组会写成 [C 。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
[xinli@192 ~]$ jmap -histo 26001 | head -30 num #instances #bytes class name---------------------------------------------- 1: 2433674 208875632 [C 2: 72266 161710576 [B 3: 2288352 54920448 java.lang.String 4: 295753 36620048 <constMethodKlass> 5: 795406 35750608 [Ljava.lang.Object; 6: 295753 23665800 <methodKlass> 7: 803901 19293624 java.util.HashMap$Entry 8: 584375 18700000 java.util.LinkedHashMap$Entry 9: 375345 18016560 org.hibernate.collection.PersistentSet 10: 249156 16440472 [I 11: 199796 15983680 java.lang.reflect.Method 12: 98625 15092552 [Ljava.util.HashMap$Entry; 13: 375797 15031880 org.hibernate.engine.CollectionEntry 14: 22720 14800808 <constantPoolKlass> 15: 805673 12890768 java.lang.Long 16: 375797 12025504 org.hibernate.engine.CollectionKey 17: 481249 11549976 java.sql.Timestamp 18: 155849 11221128 VideoCategory 19: 87492 11198976 VideoProgramMenu 20: 22720 10706552 <instanceKlassKlass> 21: 18790 9374096 <constantPoolCacheKlass> 22: 163064 9131584 org.codehaus.groovy.runtime.metaclass.MetaMethodIndex$Entry 23: 166641 9002408 <symbolKlass> 24: 148902 8338512 org.codehaus.groovy.runtime.metaclass.MetaMethodIndex$Entry 25: 320357 7999624 [Ljava.lang.String; 26: 331095 7946280 java.sql.Date 27: 472017 7552272 org.hibernate.util.IdentityMap$IdentityKey[xinli@192 ~]$ |
以上只是输出的一部分。输出中有很多占用内存的 [C 实体。
存货对象的查看:
|
1
2
3
4
5
6
|
[xinli@192 ~]$ jmap -histo:live 26001 | head -5 num #instances #bytes class name---------------------------------------------- 1: 1891237 111818968 [C 2: 1903147 45675528 java.lang.String |
比较一下字符数据是不是降低了不少,说明有好多等待回收的垃圾。
jConsole,jvisualvm和jmap使用的更多相关文章
- (转载)jConsole,jvisualvm和jmap使用
原文链接:http://my.oschina.net/freegarden/blog/286372 摘要 Oracle JVM自带了一些工具,观察java程序的运行,用于排错调优.正文将会对 jCon ...
- 【经验记录】Jconsole Jvisualvm 监控Tomcat
环境:centos 6 1.首先检查hostname是否正确,输入以下命令 hostname -i 如果输出机器ip,则表示正确,如果输出 hostname: Unknown host 查看/etc/ ...
- JConsole/JvisualVM 远程连接失败处理
今天在使用JConsole进行远程连接时,发现IP和端口在Windows下是可以远程telnet的,但是,使用JConsole时却无法连接. 我的环境如下: Windows下运行JConsole,准备 ...
- jconsole & jvisualvm远程监视websphere服务器JVM的配置案
jconsole是JDK里自带的一个工具,可以监测Java程序运行时所有对象的申请.释放等动作,将内存管理的所有信息进行统计.分析.可视化.我们可以根据这些信息判断程序是否有内存泄漏问题. 使用jco ...
- JConsole & JVisualVM远程监视Websphere服务器JVM的配置方法
原文链接:http://xjsunjie.blog.51cto.com/999372/1331880/ jconsole是JDK里自带的一个工具,可以监测Java程序运行时所有对象的申请.释放等动作, ...
- Jconsole/jvisualvm远程监控weblogic中间件配置
1.进入linu操作界面,进入到启动服务目录下 2.选择要监控的服务的启动项,进入到编辑状态(注意:要先将该文件进行备份),如下图所示 3.修改USER_AGRS域,添加如下内容,注意修改IP USE ...
- jvisualvm工具使用
VisualVM 是Netbeans的profile子项目,已在JDK6.0 update 7 中自带(java启动时不需要特定参数,监控工具在bin/jvisualvm.exe). https:// ...
- JVM性能调优监控工具jps、jstack、jmap、jhat、jstat等使用详解
转载:http://blog.csdn.net/tzs_1041218129/article/details/61630981 javap 和 javac javap -help javac -hel ...
- jvisualvm 工具使用
VisualVM 是Netbeans的profile子项目,已在JDK6.0 update 7 中自带(java启动时不需要特定参数,监控工具在bin/jvisualvm.exe). https:// ...
随机推荐
- python 日历(Calendar)模块
另附一篇文章:http://www.jb51.net/article/77971.htm 序号 函数及描述 1. calendar.calendar(year,w=2,l=1,c=6) 返回一个多行字 ...
- luogu P1002 过河卒
题目描述 棋盘上A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右.同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点.因此称之为“马拦过河卒”. ...
- 【差分约束系统】【强连通分量缩点】【拓扑排序】【DAG最短路】CDOJ1638 红藕香残玉簟秋,轻解罗裳,独上兰舟。
题意: 给定n个点(点权未知)和m条信息:u的权值>=v的权值+w 求点权的极小解和极大解(无解则输出-1) 极小解即每个点的点权可能的最小值 极大解即每个点的点权可能的最大值 题解: 差分约束 ...
- ACM-ICPC 2016亚洲区域赛(沈阳站)游记(滚粗记)
首发于QQ空间和知乎,我在这里也更一下. 前言 以前高中搞竞赛的时候,经常看到神犇出去比赛或者训练之后写游记什么的,感觉萌萌哒.但是由于太弱,就没什么心情好写.现在虽然还是很弱,但是抱着享受的心情 ...
- Manthan, Codefest 16 C. Spy Syndrome 2 字典树 + dp
C. Spy Syndrome 2 题目连接: http://www.codeforces.com/contest/633/problem/C Description After observing ...
- Word中正文两栏表格通栏排版
如图所示,需要在插入表格的地方插入连续分节符,这是word2013,在插入里面只有分页符 如果直接插入的话表格上下的分节符会分栏,那样表格会歪曲, 可以上面一段和下面一段设置成通栏,然后中间插入表格, ...
- .net 中两个日期算经过的月份数
DateTime startDate = DateTime.Parse("2014-11-1"); DateTime endDate = DateTime.Parse(" ...
- (转)DLL中导出函数的两种方式(dllexport与.def文件)
DLL中导出函数的两种方式(dllexport与.def文件)http://www.cnblogs.com/enterBeijingThreetimes/archive/2010/08/04/1792 ...
- 【spring data jpa】根据一个时间字段 查询 时间段的处理方法
处理方法 包含结束时间00.00.00 Date createDate = boxCodeLog.getCreateDate(); if (createDate != null){ LocalDat ...
- UINavigationController 详解
// 导航控制器 // 1. 比较常用的视图控制器管理类 // 2. 以栈的形式管理视图控制器, 先进后出 // 3. 创建navigation后, 视图控制器上会多出一个导航栏 // 4. 导航栏高 ...