在线上选了8台机器(核心池、非核心池、用户关系池、外网分别在XXYY各一台),部署了jvm监控的 agent之后,通过对数据的分析,得出了这8个ip的健康状况。其中最好的是 的ip。最差的是 。当时 上的ip的监控项报表如下(共15个健康判断项,评判项的健康情况可能随着时间变化而变化)。这里对每一个 健康评判项,如果在黄色预警值之下,那么健康结果是绿色;如果在黄色预警值和红色预警值之间,那么健康结果是黄色;如果在红色预警值之上,那么是健康结果是红色。
System Metrics
健康评判项 | 说明 | 黄色预警阀值 | 红色预警阀值 | 当前健康情况 |
MemoryUtilization | 内存的使用率,使用的内存占整个内存的比例 | 0.8 | 0.9 | RED |
SystemLoadAverage | 系统的平均负载,最近一分钟内排队等待执行的任务数/(等待执行 的任务数+正在执行的任务数)的平均值 | 0.75 | 0.9 | RED |
SwapUtilization | SWAP的使用率,Swap占用情况占整个Swap区的比重 | 0.05 | 0.1 | GREEN |
ProcessCpuLoad | 进程的CPU负载 | 0.75 | 0.9 | GREEN |
JVM Metrics
健康评判项 | 说明 | 黄色预警阀值 | 红色预警阀值 | 当前健康情况 |
YoungGCRatio | Young GC的执行频率,最近10分钟内执行Young GC的次数 | 60 | 180 | RED |
YoungGCAvgTime | Young GC的平均执行时间 ,系统启动以来Young GC的平均执行时间 | 50 | 100 | YELLOW |
FullGCRatio | Full GC的执行频率,最近10分钟内执行Full GC的次数 | 1 | 3 | RED |
FullGCTimePercent | Full GC时间比重,最近10分钟内Full GC时间占的比例 | 0.05 | 0.1 | GREEN |
GCTimeSpentPercent | GC时间比重,最近10分钟GC时间占的比例 | 0.1 | 0.2 | GREEN |
FullGCAvgTime | Full GC的平均执行时间,系统启动以来Full GC的平均执行时间 | 1000 | 3000 | GREEN |
NoHeapUsage | 非堆的使用率,使用的非堆内存占整个非堆的比例 | 0.9 | 0.98 | GREEN |
OOM | 是否可能OOM | 1 | 1 | GREEN |
HeapUsage | 堆的使用率,使用的堆内存占整个堆的比例 | 0.9 | 0.98 | GREEN |
TomcatMetrics
健康评判项 | 说明 | 黄色预警阀值 | 红色预警阀值 | 当前健康情况 |
TomcatErrorPercent | Tomcat的错误比例,Tomcat对接口请求返回400+的 比例 | 0.0001 | 0.001 | RED |
TomcatThreadBusy | Tomcat线程池的繁忙程度,活跃的线程数占所有线程数的比例 | 0.85 | 0.95 | GREEN |
在这些不健康的贡献项 中,基本都是CPU负载比较高,内存使用量比较高,GC比较频繁,以及Tomcat接收request请求返回400+的比 例比较高。各业务方也可以一起帮忙看看。对于监控项的一些预警值,都是来源于网络教程以及经验总结,如果大家有不同意见的地方,还请指出。如果有哪些需要增加或者减少的健康评判项,也希望大家不吝赐教,感谢!接下来我们也会不断完善健康项的评判工 作。
1. 操作系统(系统负载情况、内存占用情况以及swap情况)
2. 内存(堆的使用情况,非堆的使用情况)
3. 内存池(Eden区、Survivor区、Old区、Perm区以及Code Cache的使用情况)
4. GC(Young GC和OldGC的执行次数和时间)
5. 类加载(总共加载的类的数量,总共卸载的类的数量,当前jvm中类的数量)
6. 线程(当前线程数、当前守护线程数,以及最大的线程数)
7. Tomcat线程池(连接数、允许最大连接数、当前繁忙线程数、当前线程数、允许的最大线程数)
8. Tomcat请求状况(发送字节数、接收字节数、总共请求数、错误请求数、总共处理时间、最大处理时间)
9. 消耗cpu最多的top 5的线程信息(线程ID、线程名、线程状态)
10. Java线程池的状态(队列大小、完成任务数、提交任务数、活跃线程数、核心线程数)