JVM监控

JVM监控能够实时监控Java应用程序的资源和性能,帮助运维人员分析内存、线程性能数据,掌握每个进程运行时的资源使用情况,判断是否有内存溢出或应用运行异常情况。

  • 内存持续增长,如果内存持续增长有可能会导致内存溢出。

  • 频繁的完全垃圾回收,JVM在完全垃圾回收时会使所有正在运行的程序停顿,直至垃圾回收完毕,此段时间内,应用系统的响应就会变慢。

  • 发现互相死锁的线程。

  • 监控线程中的代码堆栈执行时间。

  • 监控所有线程状态、CPU使用率。要特别注意,长时间处于Blocked、Waiting和Timed_Waiting状态的线程,其阻塞和等待的代码处会有潜在的性能问题,根据我们统计出来的这些状态的线程,用户可以用jstack命令,具体检查阻塞和等待的代码。

注意:只有Java应用支持JVM监控。

在“JVM”页面的JVM进程列表查看主机、进程名称、进程路径、JVM版本和启动时间。点击进程名称查看JVM的内存和线程运行情况。

3.2.11.png

内存分析

在内存分析中查看堆&垃圾回收情况,包括内存使用状态的概要信息、堆内存及非堆内存的使用情况、垃圾回收情况。

内存使用状态

在内存使用状态的概要信息中查看内存平均使用率、最近5分钟使用率、内存大小。

3.2.11-2.png

Heap memory和No Heap memory

查看Heap memory(堆内存)和No Heap memory(非堆内存)在一段时间内的变化趋势,包括UsageMAXCommited

3.2.11-3.png

堆的持续增长意味着潜在的内存泄漏或溢出,通过变化趋势图发现潜在风险。

垃圾回收

GC-Avg CountGC-Avg Time这两个垃圾回收图表中,关注完全回收的次数和时间,因为它影响到系统的响应时间。不同的垃圾回收器,其完全回收的名字不一样。

3.2.11-4.png

Memory Pool

在Memory Pool(内存池)中查看内存使用状态及变化趋势。不同的垃圾回收器,其各个内存的名字不一样。

3.2.11-5.png

 线程分析

在线程分析中查看线程数变化趋势、所有线程的运行状态及各性能指标数据,不同状态的线程用不同颜色标记。

3.2.11-6.png

3.2.11-7.png

其中,CpuTime是指从线程启动到现在为止共运行的时间;Cpu则是以jvm_period为周期,在这个周期内,该线程执行的CpuTime占jvm_period的百分比。

要特别注意,长时间处于Blocked、Waiting和TimedWaiting状态的线程,其阻塞和等待的代码处会有潜在的性能问题,根据我们统计出来的这些状态的线程,用户可以用jstack命令,具体检查阻塞和等待的代码。

通过线程的运行状态能够发现死锁问题,但没有必要实时监控线程,不需要监控时在配置文件中将dumpThread配置为false即可。