文档首页 > > 用户指南> 性能管理> JVM监控

JVM监控

分享
更新时间: 2019/08/09 GMT+08:00

JVM监控展示基于Java应用的JVM运行环境的内存和线程指标,您可以实时监控指标趋势进行性能分析。

JVM监控功能提供JVM内存和线程指标您可以单击“内存”和“线程”两个页签,查看内存和线程指标图,快速分析定位内存泄漏、线程异常等问题。

JVM监控界面说明

图1 JVM监控界面

内存指标图表

图2所示,展示设置的时间段内某个实例的总内存、堆内存、非堆内存等JVM不同内存区域的最大值、分配值和使用情况的趋势,也展示设置的时间段内某个实例的垃圾收集堆的GC时间和GC次数趋势。
图2 内存指标图

JVM内存介绍

JVM区域总体分为Heap memory和Non-Heap memory。

  • Heap memory:堆是Java 虚拟机运行时数据区域,分配所有类实例和数组的内存。对象的堆内存由称为垃圾回收器的自动内存管理系统回收。Heap区分为Eden Space、Survivor Space和Tenured Space。
  • Non-Heap memory:Java 虚拟机管理堆之外的内存。Non-Heap区分为Code Cache、Permanent Space或Meta Space。

Java堆是垃圾收集器管理的主要区域,又称为Garbage Collectioned Heap,GC方式包括Full GC和Minor GC。

表1 内存区域说明

区域名称

说明

Eden Space

用于最初从线程池分配内存给大部分对象

Survivor Space

用于保存在Eden区内存池中经过垃圾回收后没有被回收的对象。

Tenured Space

用于保持已经在Survivor区内存池中存在了一段时间的对象。

Code Cache

用于编译和保存本地代码的内存。

Permanent Space

用于保存虚拟机的静态数据,例如,类和方法对象。

Meta Space

用于保存本地化内存中类的元数据。Java 8之后Meta Space替代Permanent Space。

Full GC

当内存回收之后仍无法满足内存空间分配需求时, 对整个堆空间(新生代、老年代和永久代)进行垃圾收集。

Minor GC

当分配对象遇到内存不足时,对新生代空间(Eden区和Survivor区)进行垃圾收集。

JVM采用分代垃圾回收。在JVM的内存空间中把堆空间分为老年代和新生代。将大量(90%以上)创建后短期消亡的对象存储在新生代,而老年代中存放生命周期长久的实例对象。新生代空间分为Eden区和两个Survivor区。新对象首先分配在Eden区,Survivor区作为Eden区和Tenured区的缓冲,在Survivor区的对象经历若干次收集仍然存活的,就会被转移到老年区,如 图3所示。
图3 内存区域图解
说明:

新生代共有两个Survivor区,分别用from和to指针指代,其中to指针指向空的Survivor区。

线程指标图表

图4所示,展示设置的时间段内某个实例的线程数、粘滞线程、专用线程等线程执行情况的趋势。
图4 线程指标图
表2 线程说明

线程名称

说明

总数

是指总线程数,包含活动线程数和备用线程数。粘滞线程和专用线程在执行完成后变为备用线程。

死锁

是指两个或两个以上的进程在执行过程中,由于竞争资源或彼此通信而造成的阻塞现象,导致系统处于死锁状态,此类永远在互相等待的进程称为死锁进程。

粘滞线程

如果执行线程处理某个请求的粘滞时间超过配置的粘滞线程最长时间 ,则该线程标记为粘滞线程。

专用线程

如果某个请求独占执行线程的时间超过正常执行时间且不超过粘滞线程最长时间,则该线程标记为专用线程。

执行总数

是指正在执行的线程数,包含粘滞线程数、专用线程数和正常执行的线程数。

活动执行

是指活动的线程数,包含空闲的线程数和正在执行的线程数。

空闲执行

是指处于空闲状态的线程数。 当没有任务时线程处于空闲状态,收到请求时,线程池给此请求分配一个空闲线程,任务完成后回到线程池中等待下次任务。

分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

跳转到云社区