Java千百问_07JVM架构(018)_如何监控jvm的运行情况

点击进入_更多_Java千百问

1、如何监控jvm的运行情况

了解jvm内存模型看这里:java内存模型是什么样的

了解jvm内存管理看这里:jvm是如何管理内存的

了解jvm垃圾回收机制看这里:java垃圾回收机制是什么

了解jvm内存优化看这里:java内存如何优化

我们通常使用Jdk工具来监控jvm的运行情况,当然目前有很多第三方产品是通过jdk提供的api来组织数据进行监控的。具体来说有如下监控软件:

  • Jconsole

    jdk自带,功能简单,但是可以在系统有一定负荷的情况下使用。对垃圾回收算法有很详细的跟踪。

  • JavaVisualVM

    JDK自带,功能强大,与JProfiler类似。推荐使用,通过jdk/bin/jvisualvm即可启动。

  • JProfiler

    商业软件,需要付费。功能强大。

2、监控软件都能监控什么

上面这些调优工具都提供了强大的功能,但是总的来说一般都类似,能够监控CPU、内存、线程等信息。

例如JavaVisualVM具有以下几类功能:CPU、堆、类、线程关键信息,手动进行垃圾回收GC,线程详细信息,CPU、内存抽样信息,生成堆Dump、线程Dump

了解Dump文件看这里:什么是Dump文件

CPU、堆、类、线程关键信息

图形化CPMU、堆、类、线程关键信息供我们查看,并且可以通过”执行垃圾回收”可以手动进行垃圾回收GC。如图:

线程详细信息

应用中每个线程的详细信息,包括运行时、休眠、等待、驻留、监视等状态的线程。如图:

CPU、内存抽样信息

通过收集一段时间的CPU、内存运行数据,展示内存和线程的详细信息。如图:

生成堆Dump、线程Dump

通过生成某个应用的堆、线程Dump来分析具体的Dump文件。

通过堆Dump可以监控:堆详细概要信息,堆内类对象分析,堆内对象实例详细信息,OQL堆信息自定义查询

通过线程Dump可以监控:线程状态变化,线程堆栈信息

如图:

堆详细概要信息

展示堆Dump的概要信息,包括堆基本信息、环境、系统属性、堆转储上的线程。如图:

堆内类对象分析

展示堆内使用到的所有类,以及它们的实例数和占用大小。默认按照实例数倒序。如图:

堆内对象实例详细信息

通过类可以进入指定类的实例详细信息,包括每一个实例的详细信息。如图:

OQL堆信息自定义查询

通过OQL语言查询我们想得到的结果。如图:

线程Dump信息

通过打印线程堆栈,展示线程状态变化,以及运行信息。如图:

我们能够根据我们监控的到信息,能够让我们发现代码的问题,优化的办法。

时间: 2024-12-09 00:25:10

Java千百问_07JVM架构(018)_如何监控jvm的运行情况的相关文章

Java千百问_07JVM架构(019)_运行时常量池是什么

点击进入_更多_Java千百问 1.运行时常量池是什么 运行时常量池(Runtime Constant Pool),它是方法区的一部分.Class文件中除了有类的版本.字段.方法.接口等描述等信息外,还有一项信息是常量池(Constant Pool Table),用于存放编译期生成的各种字面量和符号引用,这部分内容将在类加载后存放到常量池中. 了解java内存管理看这里:jvm是如何管理内存的 如图: 运行时常量是相对于常量来说的,它具备一个重要特征是:动态性.当然,值相同的动态常量与我们通常说

Java千百问_07JVM架构(003)_内存分配有哪些策略

点击进入_更多_Java千百问 1.内存分配有哪些策略 我们从编译原理讲起,不同的开发环境.开发语言都会有不同的策略.一般来说,程序运行时有三种内存分配策略:静态的.栈式的.堆式的 静态存储 是指在编译时就能够确定每个数据目标在运行时的存储空间需求,因而在编译时就可以给它们分配固定的内存空间. 这种分配策略要求程序代码中不允许有可变数据结构的存在,也不允许有嵌套或者递归的结构出现,因为它们都会导致编译程序无法计算准确的存储空间. 栈式存储 栈式存储分配是动态存储分配,是由一个类似于堆栈的运行栈来

Java千百问_07JVM架构(005)_显示内存管理有什么弊端

点击进入_更多_Java千百问 1.显示内存管理有什么弊端 手动内存管理一般被称为显示内存管理,显示内存管理经常发生两种情况: 引用悬挂 当一个被某个引用变量正在使用的内存空间,在重新分配过程中被释放掉了,释放后,该引用变量就处于悬挂状态(所引用的对象已经不存在了). 如果这个被悬挂引用变量,试图操作原来对象的时候,由于该对象本身的内存空间已经被手动释放掉了(已经不存在了),所以这个执行结果是不可预知的. 内存泄漏 当某些引用变量不再引用该内存对象的时候,而该对象原本占用的内存并没有被释放,这种

Java千百问_07JVM架构(010)_什么是老生代的标记算法

点击进入_更多_Java千百问 1.什么是老生代的标记算法 了解堆内存看这里:java堆内存是什么样的 了解java垃圾回收看这里:java垃圾回收机制是什么 所谓标记算法(Mark),分为多种,最简单直观的即标记-清除算法(Mark-Sweep).即将认定为可回收的内存做一个标记,然后统一将被标记的清理,算法图解如下: 算法过程: 1. 先判定对象是否可回收,对其标记. 2. 统一回收(简单地删除对垃圾对象的内存引用). 标记-清除算法十分简单直观,且容易实现和理解.但是有一个很严重的问题,内

Java千百问_07JVM架构(014)_什么是Dump文件

点击进入_更多_Java千百问 1.什么是Dump文件 Dump文件是进程的内存镜像.可以把程序的执行状态通过调试器保存到dump文件中. Dump文件是用来给驱动程序编写人员调试驱动程序用的,这种文件必须用专用工具软件打开. 当我们的程序发布出去之后,在客户机上是无法跟踪代码的,所以Dump(扩展名是 .dmp)文件对于我们来说特别重要.我们可以通过.dmp文件把出现问题的情况再现,然后根据再现的状况(包括堆栈调用等情况),可以找到出现问题对应的行号. 2.如何生成Dump文件 生成Dump文

Java千百问_07JVM架构(002)_jvm实例的结构是什么样的

点击进入_更多_Java千百问 1.jvm实例的结构是什么样的 在Java虚拟机规范中,一个虚拟机实例的行为主要组成部分为:子系统.内存区域.数据类型和指令. 这些组件描述了JVM内部的一个抽象结构.与其说这些组成部分的目的是进行JVM内部结构的一种支配,不如说是提供一种对外部行为的严格定义,该规范定义了这些抽象组成部分的相互作用,以及Java虚拟机执行所需要的行为. 了解jvm内存管理看这里:java内存模型是什么样的 下图描述了JVM实例的一个内部结构,其中主要包括主要的子系统.内存区域.

Java千百问_07JVM架构(016)_java内存如何优化

点击进入_更多_Java千百问 1.java内存如何优化 了解jvm内存管理看这里:jvm是如何管理内存的 了解堆内存看这里:java堆内存是什么样的 java内存的优化主要是通过合理的控制GC来实现,主要原则: 1. 不能只看操作系统级别Java进程所占用的内存,这个数值不能准确的反应堆内存的真实占用情况(因为GC过后这个值是不会变化的). 2. 使用JDK提供的内存查看工具,比如JConsole和Java VisualVM. 3. 优化内存主要的目的是降低youngGC的频率.减少fullG

Java千百问_07JVM架构(012)_fullGC、minorGC、magorGC有什么区别

点击进入_更多_Java千百问 1.fullGC.minorGC.magorGC有什么区别 fullGC.minorGC.magorGC还有youngGC是Java垃圾处理机制(GC)的名词,区分这几个概念非常简单: 老生代进行一次垃圾清理,被称为fullGC或者magorGC. 新生代进行一次垃圾清理,被称为youngGC或者minorGC. 了解java垃圾回收机制看这里:java垃圾回收机制是什么 解释完毕,不过要提一下的是,我们在JVM优化过程中的一个原则就是: 降低youngGC的频率

Java千百问_07JVM架构(011)_java垃圾回收都有哪些方式

点击进入_更多_Java千百问 1.java垃圾回收都有哪些方式 所谓垃圾回收方式,是指JVM提供的几种不同的垃圾回收器,不同的垃圾回收器进行垃圾回收时采用不同的方式.当然,总体原则遵循java垃圾回收机制. 了解java内存模型看这里:java内存模型是什么样的 了解堆内存看这里:java堆内存是什么样的 了解java垃圾回收机制看这里:java垃圾回收机制是什么 每种方式都有自己的优势与劣势.我们编程的时候可以通过向JVM传递参数来选择垃圾回收器.不同的垃圾回收期有大的不同,可以为我们提供完