主要是对Java虚拟机(JVM)的远程监视,如jdk自带的工具jvisualvm就可监视内存(JVM)、垃圾收集(GC)和线程统计,针对不同的JVM厂商,如Sun JVM、IBM JVM和Oracle JRockit JVM,监控的指标有所区别,但大体都一样。以下罗列了常见的JVM监控指标:
监控参数 | 描述 |
进程内存 | |
Eden空间 (堆内存) | 最初为大多数对象分配内存的池 |
幸存空间 (堆内存) | 在eden空间的垃圾收集之后池中幸存的对象 |
Tenured Generation (堆内存) | 在幸存空间中存在了一段时间的池中包含的对象 |
Java堆 | JVM存储对象的空间 |
Permanent Generation (非堆内存) | 保存虚拟机本身的所有反射数据,如类和方法对象。利用使用类数据共享的虚拟机,此内存可分为只读和读写区域。 |
代码缓存 (非堆内存) | 用于编译和存储本机代码的内存。 |
JIT代码缓存 | 存储转换的汇编语言并可使其高速执行的内存 |
Nursery | 分配给新的对象的空间 |
线程参数 | |
全部开始线程 | java虚拟机运行开始后的全部线程的数量 |
最大线程 | java虚拟机运行开始后最大的活动线程数量或该值被重置 |
活动线程 | 当前运行的活动线程数 |
守护线程 | 当前运行的后台程序线程数 |
可运行线程 | 在Java虚拟机中执行的线程 |
被阻塞线程 | 被阻止并等待监视器锁的线程 |
等待中的线程 | 无限期等待另一线程执行特定动作的线程 |
限时等待的线程 | 该线程等待其他线程执行动作,并且等待了表示的时间 |
死锁线程 | 线程处于死锁状态的数量 |
类加载 | |
载入的类 | 加载的类数 |
卸载的类 | 卸载的类数 |
JVM统计 | |
CPU负荷 | 表示由JVM占用的机器的负荷 |
0表示无负荷,100表示满负荷 | |
CPU使用 | 表示服务器上JVM使用CPU的信息 |
主机内存参数 | |
全部物理内存 | 物理内存MB |
空闲物理内存 | 空闲物理内存MB |
全部交换区域 | 交换区域空间大小MB |
虚拟内存 | 用来运行进程的虚拟内存的大小MB |
垃圾清理(GC) | |
花费时间/Min | 收集信息花费的大约时间(毫秒) |
收集时间/Min | 收集运行的大约时间ms |
线程数 | 用于垃圾清理的线程数 |
上次开始时间 | 本次垃圾清理的开始时间 |
上次结束时间 | 本次垃圾清理的结束时间 |
清理前内存 | 本次垃圾清理前的内存使用情况 |
清理后内存 | 本次垃圾清理后的内存使用情况 |
垃圾收集 | 执行垃圾收集使用的时间 |
编译时间 | 编译(JIT)使用的时间 |
以下列出了一些需要监控的服务对象如何开启JVM监控配置(只要按以下方式配置并重启服务后,就可以通过jvisualvm等工具进行远程监视)
说明:监控要求防火墙关闭或是放开指定端口,对于-Djava.rmi.server.hostname=172.16.1.152不是必须设置,但如果服务器在/etc/hosts
没有配置好hostname的IP有可能就无法远程连接JMX,这时候就需要配置-Djava.rmi.server.hostname