当前位置: 首页 > news >正文

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 26001
Attaching to process ID 26001, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 17.0-b16
0x00683000      139K     /lib/ld-2 .12.so
0x006a9000      1845K    /lib/libc-2 .12.so
0x0083d000      197K     /lib/libm-2 .12.so
0x00869000      19K      /lib/libdl-2 .12.so
0x00870000      130K     /lib/libpthread-2 .12.so
0x008a3000      40K      /lib/librt-2 .12.so
0x04103000      113K     /lib/libnsl-2 .12.so
0x08048000      46K      /usr/java/jdk1 .6.0_21 /bin/java
0x4ef5f000      36K      /usr/java/jdk1 .6.0_21 /jre/lib/i386/libnio .so
0x53402000      4K       /usr/java/jdk1 .6.0_21 /jre/lib/i386/librmi .so
0xb6c09000      93K      /usr/java/jdk1 .6.0_21 /jre/lib/i386/libnet .so
0xb6c1d000      33K      /usr/java/jdk1 .6.0_21 /jre/lib/i386/libmanagement .so
0xb6c75000      57K      /lib/libnss_files-2 .12.so
0xb6c86000      74K      /usr/java/jdk1 .6.0_21 /jre/lib/i386/libzip .so
0xb6c9f000      184K     /usr/java/jdk1 .6.0_21 /jre/lib/i386/libjava .so
0xb6d15000      9452K    /usr/java/jdk1 .6.0_21 /jre/lib/i386/server/libjvm .so
0xb78b5000      37K      /usr/java/jdk1 .6.0_21 /jre/lib/i386/jli/libjli .so
0xb78c5000      37K      /usr/java/jdk1 .6.0_21 /jre/lib/i386/native_threads/libhpi .so
0xb78ce000      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 26001
Attaching to process ID 26001, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 17.0-b16
 
using 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 Generation
Eden Space:
    capacity = 266665984 (254.3125MB)
    used     = 219310160 (209.1504669189453MB)
    free      = 47355824 (45.16203308105469MB)
    82.24152053829258% used
From Space:
    capacity = 34734080 (33.125MB)
    used     = 34713344 (33.105224609375MB)
    free      = 20736 (0.019775390625MB)
    99.94030070754717% used
To Space:
    capacity = 46268416 (44.125MB)
    used     = 0 (0.0MB)
    free      = 46268416 (44.125MB)
    0.0% used
PS Old Generation
    capacity = 715849728 (682.6875MB)
    used     = 591219088 (563.8304595947266MB)
    free      = 124630640 (118.85704040527344MB)
    82.58983203804472% used
PS 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

比较一下字符数据是不是降低了不少,说明有好多等待回收的垃圾。

转载于:https://www.cnblogs.com/zhengah/p/4936076.html

相关文章:

  • 创建索引
  • 总结概括对于大数据、高并发的网站如何进行优化的问题
  • NAT
  • javascript设计模式实践之代理模式--图片预加载
  • 数据库开发基本操作-Microsoft SQL Server Management Studio Express下载和安装
  • Extract+datapump+replicat 测试
  • Git 菜鸟变大神 (四)Github 创建远程仓库以及关联本地仓库
  • Flash移动开发的一本好书AndroidIOS
  • ::before和::after 常见的用法
  • 跟我一起学习C++虚函数--第二篇
  • MySQL优化order by导致的 using filesort
  • 管理日志-原创理论工具--技能方格图
  • objective-c系列-NSMutableString
  • MySQL 数据库开发规范
  • 20 种提升网页速度的技巧
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • 【5+】跨webview多页面 触发事件(二)
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • Angular2开发踩坑系列-生产环境编译
  • Asm.js的简单介绍
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • flutter的key在widget list的作用以及必要性
  • HTTP中的ETag在移动客户端的应用
  • IP路由与转发
  • javascript面向对象之创建对象
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • python学习笔记-类对象的信息
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • text-decoration与color属性
  • underscore源码剖析之整体架构
  • win10下安装mysql5.7
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 初识MongoDB分片
  • 解决iview多表头动态更改列元素发生的错误
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 手机端车牌号码键盘的vue组件
  • 无服务器化是企业 IT 架构的未来吗?
  • 一、python与pycharm的安装
  • AI算硅基生命吗,为什么?
  • PostgreSQL之连接数修改
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • 选择阿里云数据库HBase版十大理由
  • ​水经微图Web1.5.0版即将上线
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (C++20) consteval立即函数
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (Python第六天)文件处理
  • (编译到47%失败)to be deleted
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (三)终结任务
  • (十一)图像的罗伯特梯度锐化
  • (一)Neo4j下载安装以及初次使用