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表示最大的线程数,这个数值可以通过更改/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的配置

java cpu 监控工具_Java自带的GUI性能监控工具Jconsole以及JisualVM简介相关推荐

  1. java cpu高_Java中的CPU占用高和内存占用高的问题排查

    下面通过模拟实例分析排查Java应用程序CPU和内存占用过高的过程.如果是Java面试,这2个问题在面试过程中出现的概率很高,所以我打算在这里好好总结一下. 1.Java CPU过高的问题排查 举个例 ...

  2. 服务器监控工具_8款服务器和应用性能监控工具

    点击上方"蓝色字体",选择 "设为星标" 关键讯息,D1时间送达! 对于每天可能有数十万甚至数百万请求的大型网络,即使最微不足道的延迟也可能导致给业务带来影响. ...

  3. java命令大全_Java自带命令详解

    1. 背景 给一个系统定位问题的时候,知识.经验是关键基础,数据(运行日志.异常堆栈.GC日志.线程快照[threaddump / javacore文件].堆转储快照[heapdump / hprof ...

  4. java 转码_JAVA自带转码方式的学习

    最近工作中遇到一个问题,由于海外系统环境默认采用UTF-8格式编码,以支持多语言环境.而国内系统由于只需要支持中英文,故默认采用GBK编码格式.因此当把海外环境生成的交易报告单发送给国内的报表系统时, ...

  5. java 中文 编译_java编译带中文是显示乱码的错误

    FirstJava.java:3: 错误: 编码GBK的不可映射字符 System.out.println("娆㈣繋瀛︿範Java绋嬪簭锛?")锛? ^ FirstJava.jav ...

  6. java校园导航_Java实现的具有GUI的校园导航系统

    0.写在前面 2020-5-18 更新 这个东西已经是两年前的了,现在问我具体细节我也不是很清楚了,而且现在review两年前的代码感觉写的好烂...请大家有问题下面留言,不要加我的企鹅了,正在准备考 ...

  7. java阅读题_java 练习题带答案

    第一题 int x = 1,y=1; if(x++==2 & ++y==2) { x =7; } System.out.println("x="+x+",y=&q ...

  8. java entryset循环_Java之Map遍历方式性能分析:ketSet 与 entrySet

    keySet():将Map中所有的键存入到Set集合中.因为set具备迭代器,所以可以以迭代方式取出所有的键,再根据get方法获取每一个键对应的值,其仅能通过get()取key. entrySet() ...

  9. linux java性能监控工具_性能监控工具以及java堆分析OOM

    一.性能监控工具 1.系统性能监控 Linux -确定系统运行的整体状态,基本定位问题所在 -uptime: ------系统时间 ------运行时间(例子中为127天) ------连接数(每个终 ...

最新文章

  1. Lumen报class does not exist的mailer坑
  2. OSI参考模型——网络层的主要功能
  3. 方法重载-Overload
  4. c++string 输入换行符
  5. 循环录入某学生 5 门课的成绩并计算平均分,如果某分数录入为负,停止录入并提示录入错误
  6. java泛型的作用及其基本概念
  7. 【GitHub】知识蒸馏从入门到精通
  8. java毕业实习日志_java毕业实习日记.doc
  9. 信息系统基础知识(笔记)
  10. flink 容错机制(检查点的保存、恢复、检查点算法、保存点、状态一致性的三种级别、end-to-end exactly-once)
  11. word中方框中打钩
  12. 求三个字符串的最长公共子序列LCS(A,B,C)
  13. opencv基础笔记
  14. 如何判断一个数的二进制中1的个数(num = (num - 1))
  15. 卡方检验——离散型特征相关性分析
  16. 本溪市公安局诉求电话
  17. 快来西瓜创客吃瓜啦!
  18. 数据仓库开发之路之一--准备工作
  19. 盘点2013全球五大半导体IP供应商:ARM将Intel拉下马
  20. 编写一个自我介绍python_简单的个人简历的自我介绍怎么写

热门文章

  1. [微信小程序直播平台开发]___(一)介绍与流程
  2. android社会化分享
  3. mybatis generator 属性详解
  4. 单片机小白学步系列(十三) 点亮第一个LED——好的開始,成功的一半
  5. 转载 linux内核 asmlinkage宏
  6. 重新封装一个iptables防止规则重复
  7. Access注入偏移爆字段
  8. 女人护肤品可与男人共用! - 健康程序员,至尚生活!
  9. 一个按钮,如果5分钟内点击再次点击给予提示操作频繁,在JS里可以这样写
  10. 存储过程或视图的字符串查询