(转)Java自带的GUI性能监控工具Jconsole以及JisualVM简介

原文链接:http://blog.csdn.net/chendc201/article/details/22905503

1 Jconsole

1.1 简介以及连接

  JConsole是一个基于JMX的GUI工具,用于连接正在运行的JVM,它是Java自带的简单性能监控工具。下面以对tomcat的监控为例,带领大家熟悉Jconsole这个工具。

  Step 1,在dos/bash命令下输入:jconsole;

  Step 2,在弹出的对话框中选中apache,并点击connect(假设你的tomcat已经启动);

  

  接下来,你就能使用jconsole来做一些简单的性能监控了。

1.2 模块介绍

1.2.1 Overview

  

  1. 概要界面,主要显示堆内存使用情况、活动线程数、加载类数、CPU使用率四个参数的概要,可以通过下拉框来定制显示的时间范围;

  2. 假如堆内存的图像一直在上升而没有下降的动作发生,则要怀疑是否内存泄露;健壮的项目由于GC的存在,所以它的上升和下降的幅度应该大抵相同;

  3. CPU的图像规律跟堆内存的大致相同。

1.2.2 Memory

  

  1. 图示为被监控程序的详细内存图;

  2. 关注点1:点击右上的GC按钮可以通知JVM进行垃圾回收,实质是把垃圾回收队列的优先级提高;

  3. 关注点2:GC time显示了每次回收的时间、算法以及回收数,7.619 seconds是用时,Copy表示垃圾回收机制的复制算法,MarkSweepCompact表示垃圾回收机制的标记-清除-压缩算法,1426 collections表示回收的数量;

  4. 右下角的图案,Heap内存区包括:年轻代Eden Space、存活代Survivor Space和老年代Tenured Gen;Non-Heap内存区包括:代码缓存区Code Cache和持久代Perm Gen;可通过改变下拉框或者直接点击图形实现切换。

1.2.3 Threads

  

  1. Peak表示最大的线程数,这个数值可以通过更改<tomcat_home>/conf/server.xml下的maxThreads来更改;

  2. 点击具体的Thread之后,我们可以看到它的方法栈的详细调用情况;

  3. 点击Detect Deadlock可以检测是否有死锁。

1.2.4 Classes

  

  关注点:类的数量变化。

1.2.5 VM Summary

  

  关注点1:上面几栏是关于系统和项目的概要信息;

  关注点2:最下面一栏的第一项是tomcat设定的JVM参数,如果你想知道你设置的参数有没有成功启用,看这里就对了。

1.2.6 MBeans

  

  关注点1:Attributes显示该bean的详细细节;

  

  关注点2:Operations显示该bean的所有方法,可以点击该按钮触发方法,但个人不推荐这么做,应该通过程序的统一入口来触发。

2 JVisualVM

2.1 简介以及连接

  JVisualVM是Netbeans的profile子项目,已在JDK6.0 update 7 中自带(bin/jvisualvm.exe),能够监控线程,内存情况,查看方法的CPU时间和内存中的对象,已被GC的对象,反向查看分配的堆栈(如100个String对象分别由哪几个对象分配出来的)。

  Step 1,假如你手头上的Tomcat项目已经启动,在bash/dos下输入:jvisualvm,敲击回车;

  Step 2,选中Tomcat,双击即可启动监控,在初始页面我们即可看到一些概要信息和JVM参数。

  

2.2 模块介绍

2.2.1 Monitor

  

  关注点1:按钮“Perform GC”可通知JVM将垃圾回收动作的优先级提高;

  关注点2:“Daemon”线程是指JVM的守护线程,通俗的理解为JVM的系统进程;

  关注点3:按钮“Heap Dump”可生成堆内存快照,下面详细讲解Heap Dump的使用。

2.2.1.1 Heap Dump

  1)Summary

  

  关注点1:红框标注的箭头处,可以凭你的点击顺序切换前后窗口;

  关注点2:“Inspect”检查处可以查询最大的对象,个数可自行定制;

  关注点3:点击“Show Threads”可以显示线程细节,如下所示:

  

  关注点1:timed_waiting和runnable表示线程运行状态;

  关注点2:daemon表示这个线程是守护线程,如没有标记daemon则表示它是一个用户线程,如main线程;

  关注点3:prio表示该线程的优先级,在java线程中数字越大优先级越高,取值在1至10之间,默认为5;

  关注点4:点击被标注成蓝色的相关类,可以在Instances界面查看细节;

  2)Instances

  

  关注点1:右上角的三个按钮可以对界面进行定制;

  关注点2:点击“Compute Retained Sizes”可计算每个field的保留尺寸,简言之就是它所占的byte值;

  关注点3:右下角红框处标记出了,不同的图形代表不同的角色;

  3)Classes

  

  关注点1:左下角可以通过filter来过滤显示视图;

  关注点2:右击某个类可以让其在Instances界面显示,查看其细节;

  关注点3:点击右上角红框处可以与另一个内存快照进行比较,在比较视图中可以看出每个类的增加和减少的情况;

  4)OQL Console

  

  关注点1:点击Saved Queries,选中具体的Query实例,在点击Execute就可以进行查询了,Save按钮可以保存你的query语句;

  关注点2:比较使用的是PermGen分析语句;

2.2.2 Threads

  

  关注点1:线程的颜色从绿、紫、黄、红,分别代表运行、休眠、等待和死锁;

  关注点2:Timeline以时间轴显示线程情况,Table以表格显示,Details以细节的图形+表格方式显示线程情况。当然你也可以选中单个线程来显示,通过点击下拉框即可实现;

  关注点3:点击Thread Dump即可生成线程快照,其功能跟2.2.1.1 Heap Dump 1)Summary中的Show Threads类似,这里不多加解释。

2.2.3 Sampler

2.2.3.1 采样器简介

  1. 通过settings可以对CPU的采样来源以及内存的刷新时间进行设置;

  2. 点击CPU或者Memory即可开始监控,点击Stop则停止采样;

2.2.3.2 CPU

  1)CPU samples

  

  关注点1:点击Thread Dump可生成线程快照;

  关注点2:点击Snapshot可生成线程的快照,快照里面包含了所有线程的调用树以及其热点编译情况,如下图所示:

  

  2)Thread CPU Time

  

  关注点:点击Deltas按钮后,可记录线程的变化,功能有点类似JProfiler的“Mark Current Values”。

2.2.3.3 Memory

  1)Heap histogram

  

  关注点1:Deltas、Peform GC、Heap Dump的功能与上文类似;

  关注点2:点击Snapshot将生成如下的内存快照,主要显示堆内存中类的内存信息:

  

  2)PermGen histogram

  

  图为持久代的内存情况。

  3)Perthread allocations

  

  图为每个线程的内存分布情况。

2.2.4 Profiler

2.2.4.1 CPU

  

  Profiler跟Sampler不同在于它是对程序的实时监控,而Sampler只能说是一段时间内的统计采样。

  在CPU功能模块我们可以看到每个热点编译方法的使用时间。

2.2.4.2 Thread

  

  对当前存活对象的实时监控。

3 如何开启远程监控

3.1 Tomcat中的参数设定

  windows系统在catalina_home/bin/setenv.bat中加入如下配置:  

set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port="9005" -Dcom.sun.management.jmxremote.authenticate="false" -Dcom.sun.management.jmxremote.ssl="false"

  linux系统在catalina_home/bin/setenv.sh中加入如下配置:  

export JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=‘9005‘ -Dcom.sun.management.jmxremote.authenticate=‘false‘ -Dcom.sun.management.jmxremote.ssl=‘false‘"

  1)‘-Dcom.sun.management.jmxremote’表示启用Java Management Extensions(Java管理扩展)技术,简称JMX。JMX在Java编程语言中定义了应用程序以及网络管理和监控的体系结构、设计模式、应用程序接口以及服务。通常使用JMX来监控系统的运行状态或管理系统的某些方面,比如清空缓存、重新加载配置文件等。

  2)‘9004’表示这个JMX服务的端口号;

  3)‘authenticate’表示false时无需帐号密码验证,如改为true(启用帐号密码验证),需增加以下配置:

    >  在JRE_HOME/lib/management下将‘jmxremote.password.template‘文件复制多一份,比如复制为‘jmxremote.password‘,将这个复制出来的新文件底部的monitorRole和controlRole前面的注释去掉;

    >  monitorRole的值表示读取的密码,controlRole表示读取和写入的密码,请将二者的值更改为你想要的密码;

    >  修改setenv.sh配置(windows请修改.bat)如下:

    export JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=‘9005‘ -Dcom.sun.management.jmxremote.password.file=pwdFilePath -Dcom.sun.management.jmxremote.ssl=‘false‘"

    >  ‘Set file permissions so that only you can read and write the password file’,这个复制出来的密码文件需设置成只有属主具备读写权限,否则tomcat将无法正常启动;

  4)-Dcom.sun.management.jmxremote.ssl=‘false‘

3.2 Jconsole的配置

3.3 Jvisulvm的配置

时间: 2024-10-09 10:53:00

(转)Java自带的GUI性能监控工具Jconsole以及JisualVM简介的相关文章

java自带工具-jps、jinfo、jstack、jstat、jmap

掌握java自带的这些监控工具,有助与我们很好的分析问题和jvm性能调优秀.收集了些网上整理很好的文章. Java监控工具.调优.调试辅助函数 Java自带的GUI性能监控工具Jconsole以及JisualVM简介 JDK自带监控工具

Java 自带性能监控工具:监视和管理控制台 jconsole 的使用

1. 前言 想验证你对 jvm 配的一些调优参数(比如 Xms.Xmx 等)有没有起作用吗? 想不想实时监控你自定义的线程池的在实际运行时的线程个数.有没有死锁? 应用出现 java.lang.OutOfMemoryError: Java heap space,你知道需要去调整 Xms.Xmx.想不想实时监控你的 Java 应用的堆内存使用情况,并根据峰值等数据设置最适合你的 Xms.Xmx 等参数? 应用出现 java.lang.OutOfMemoryError: PermGen space,

利用jdk自带的运行监控工具JConsole观察分析Java程序的运行

利用jdk自带的运行监控工具JConsole观察分析Java程序的运行 原文链接 一.JConsole是什么 从Java 5开始 引入了 JConsole.JConsole 是一个内置 Java 性能分析器,可以从命令行或在 GUI shell 中运行.您可以轻松地使用 JConsole(或者,它更高端的 “近亲” VisualVM )来监控 Java 应用程序性能和跟踪 Java 中的代码. 二.如何启动JConsole 如果是从命令行启动,使 JDK 在 PATH 上,运行 jconsole

java两种序列化(hessian与java自带)性能实验分析报告

序列化的5w2h分析 what:序列化是一种将java对象流化的机制 how:将一个实现了Serializable接口的对象的状态写入byte[],传输到另外一个地方,将其读出进行反序列化得对象(含状态).状态就是类中的属性是含有值的. why:方便对象在网络间进行传播,并且可以随时把对象持久化到数据库.文件等系统里 when:对象需要远程过程调用,缓存到文件或DB中(hessian,rmi,ejb) where:发送接口处,写入文件的入口处 who:发送端序列化,接收端反序列化 how muc

java性能监控工具

1.问题 OutOfMemoryError: 内存不足: 内存泄漏 线程死锁 锁竞争(Lock Contention) java消耗过多的CPU 2.java常用健康工具 jps (java virtual machine process status tool)  监控jvm进程状态信息 使用格式: jps [options] [hostid] -m: 输出传入main方法的参数 -l: 显示main类或jar的完全限定名称 -v: 显示为jvm虚拟机指定的参数 jstack: 查看某个jav

深入理解JVM—性能监控工具

我们知道,在JVM编译期和加载器,甚至运行期已经做了大量的调优操作,但是那些都是JVM针对Java程序所做的通用的.简单的优化,程序在运行时由于运行环境的复杂性.业务逻辑的复杂性,很多JVM是无法进行优化处理的,这就需要我们自己在写代码的时候就注意,以便我们的程序在特定的业务场景发挥到最佳性能. 要进行性能调优,首先我们要找到程序的性能瓶颈在哪里?而要知道性能瓶颈在哪里,我们需要借助一定的工具进行处理. 在windows操作系统下,当我们的系统运行很慢的时候,80%的人首先查看的就是任务管理器,

老李分享:《Java Performance》笔记1——性能分析基础 1

老李分享:<Java Performance>笔记1——性能分析基础 1.性能分析两种方法: (1).自顶向下: 应用开发人员通过着眼于软件栈顶层的应用,从上往下寻找性能优化的机会. (2).自底向上: 性能专家从软件栈底层的CPU统计数据(例如CPU高速缓存未命中率.CPU指令效率)开始,逐渐上升到应用自身的结构或应用常见的使用方式. 2.CPU使用率: 大多数操作系统的CPU使用率分为用户态CPU使用率和系统态CPU使用率. 用户态CPU使用率:执行应用程序代码的时间占总CPU时间的百分比

性能监控工具

性能监控工具 前言 工欲善其事必先利其器,性能优化和故障排查在我们大都数人眼里是件比较棘手的事情,一是需要具备一定的原理知识作为基础,二是需要掌握排查问题和解决问题的流程.方法.本文就将介绍利用性能监控工具,帮助开发者更快更准的找到问题产生的根源.本文分为三部分,第一部分将介绍在Linux环境下的常用监控工具,第二部分介绍Windows环境下的监控工具,第三部分将通过一个案例,介绍利用这些监控工具一步一步找出java应用程序的问题. Linux环境下的监控工具 需要先声明的是,下面介绍的部分工具

深入理解JVM一性能监控工具

一.前言 工欲善其事必先利其器,性能优化和故障排查在我们大都数人眼里是件比较棘手的事情,一是需要具备一定的原理知识作为基础,二是需要掌握排查问题和解决问题的流程.方法.本文就将介绍利用性能监控工具,帮助开发者更快更准的找到问题产生的根源.本文分为三部分,第一部分将介绍在Linux环境下的常用监控工具,第二部分介绍Windows环境下的监控工具,第三部分将通过一个案例,介绍利用这些监控工具一步一步找出java应用程序的问题. 二.Linux环境下的监控工具 需要先声明的是,下面介绍的部分工具其实在