JVM监控
JVM监控展示基于Java应用的JVM运行环境的内存和线程指标,您可以实时监控指标趋势进行性能分析。
JVM监控功能提供JVM内存和线程指标,您可以单击“内存”和“线程”两个页签,查看内存和线程指标图,快速分析定位内存泄漏、线程异常等问题。
内存指标图表
如图1所示,展示设置的时间段内某个实例的总内存、堆内存、非堆内存等JVM不同内存区域的最大值、分配值和使用情况的趋势,也展示设置的时间段内某个实例的垃圾收集堆的GC时间和GC次数趋势。
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 Collection Heap,GC方式包括Full GC和Minor GC。
区域名称 |
说明 |
---|---|
Eden Space |
用于最初从线程池分配内存给大部分对象。 |
Survivor Space |
用于保存在Eden区内存池中经过垃圾回收后没有被回收的对象。 |
Tenured Space |
用于保持已经在Survivor区内存池中存在了一段时间的对象。 |
Code Cache |
用于编译和保存本地代码的内存。 |
Permanent Space |
用于保存虚拟机的静态数据,例如,类和方法对象。 |
Meta Space |
用于保存本地化内存中类的元数据。Java 8之后Meta Space替代Permanent Space。 |
Direct Buffer |
监控直接缓冲区的使用情况。 |
Full GC |
当内存回收之后仍无法满足内存空间分配需求时, 对整个堆空间(新生代、老年代和永久代)进行垃圾收集。 |
Minor GC |
当分配对象遇到内存不足时,对新生代空间(Eden区和Survivor区)进行垃圾收集。 |
JVM采用分代垃圾回收。在JVM的内存空间中把堆空间分为老年代和新生代。将大量(90%以上)创建后短期消亡的对象存储在新生代,而老年代中存放生命周期长久的实例对象。新生代空间分为Eden区和两个Survivor区。新对象首先分配在Eden区,Survivor区作为Eden区和Tenured区的缓冲,在Survivor区的对象经历若干次收集仍然存活的,就会被转移到老年区,如图2所示。
新生代共有两个Survivor区,分别用from和to指针指代,其中to指针指向空的Survivor区。
线程指标图表
如图3所示,展示设置的时间段内某个实例的New线程数、Runnable线程数、Blocked线程数、Waiting线程数等线程执行情况的趋势。
线程名称 |
说明 |
---|---|
总数 |
是指总线程数,包含活动线程数和备用线程数。粘滞线程和专用线程在执行完成后变为备用线程。 |
死锁 |
是指两个或两个以上的线程在执行过程中,由于竞争资源或彼此通信而造成的阻塞现象,导致系统处于死锁状态。 |
New线程数 |
新建线程数量。 |
Runnable线程数 |
可运行线程数量。 |
Blocked线程数 |
阻塞线程数量。 |
Waiting线程数 |
等待中线程数量。 |
TimedWaiting线程数 |
限时等待线程数量。 |
Terminated线程数 |
终结线程数量。 |
最大连接数 |
Tomcat可用的最大连接数。 |
当前连接数 |
Tomcat当前已占用的连接数。 |
最大线程数 |
Tomcat最大执行线程数。 |
当前线程数 |
Tomcat当前执行线程数。 |
繁忙线程数 |
Tomcat当前处理任务的执行线程数。 |
添加阈值规则
您可以给JVM内存及线程的各个指标添加阈值规则,当满足规则条件时会触发告警,提醒您关注。
- 在“JVM监控”界面,先在页面左上角选择应用,再选择服务的具体某个实例。
- 在右侧的趋势图中可给内存或线程的每个指标设置阈值规则。单击趋势图上的“添加阈值规则”。
- 填写规则参数,如下图示例,最后单击“确认”。若需要发送告警通知,则“发送通知”需要选择“是”,并选择主题。
添加至服务参数说明:
- 若选择“是”,表示添加阈值规则到整个服务;
- 若选择“否”,表示添加阈值规则到单个实例。