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监控”界面,先在页面左上角选择应用,再选择服务的具体某个实例。
 - 在右侧的趋势图中可给内存或线程的每个指标设置阈值规则。单击趋势图上的“添加阈值规则”。
    
    

 - 填写规则参数,如下图示例,最后单击“确认”。若需要发送告警通知,则“发送通知”需要选择“是”,并选择主题。
    
    
 
     添加至服务参数说明:
- 若选择“是”,表示添加阈值规则到整个服务;
 - 若选择“否”,表示添加阈值规则到单个实例。
 

 
  
    

