springboot Actuator 指标分析
http.server.requests
HTTP 接口性能瓶颈 http.server.requests.max + system.cpu.usage 代码热点分析或横向扩容
核心接口性能指标,包含以下维度:
count:请求总数
max/sum:最大及总响应时间
status:HTTP 状态码分布(如 5xx 错误率)
应用场景:识别高延迟接口或异常请求激增。
/metrics/http.server.requests?tag=uri:xxx
指定URL分析
jvm.buffer.count
当前缓冲区数量(Direct/Mapped),监控堆外内存使用。
作用:统计 JVM 缓冲区(如 Direct Buffer 和 Mapped Buffer)的数量。
应用场景:监控堆外内存使用情况,排查 NIO 操作中的缓冲区泄漏问题。
Direct 网络传输、大文件读写 减少堆内外数据拷贝,提升 I/O 性能 堆外内存泄漏(需监控 jvm.buffer.memory.used 是否持续增长)
Mapped 数据库文件操作、日志持久化 文件直接映射内存,避免磁盘频繁读写 未关闭 FileChannel 导致虚拟内存耗尽或文件锁冲突
**direct 缓冲区泄漏**:若 direct 类型数量持续增加且不释放,可能引发 OutOfMemoryError: Direct buffer memory。
**mapped 缓冲区未关闭**:可能导致系统虚拟内存占用过高,甚至影响其他进程。
**jvm.buffer.memory.used**:缓冲区占用的内存大小(需区分 direct 和 mapped)。
**process.resident_memory**:进程总内存使用量,辅助判断堆外内存泄漏。
jvm.buffer.memory.used
缓冲区内存占用
作用:记录当前缓冲区实际占用的内存大小(单位:字节)。
示例:若该值持续增长,可能因未正确释放 DirectByteBuffer 导致内存溢出。
jvm.buffer.total.capacity
作用:显示所有缓冲区的总容量上限。
关联分析:与 jvm.buffer.memory.used 对比,判断缓冲区利用率是否合理。
缓冲区总容量,结合 jvm.buffer.memory.used 分析利用率。
jvm.classes.loaded
作用:统计 JVM 已加载的类数量,反映应用运行时的类加载动态。
典型问题:类加载数异常增长可能由重复加载或类加载器泄漏引起。
类加载异常 jvm.classes.loaded/unloaded 结合 JVM 分析工具(如 JProfiler)
已加载/卸载的类数量,异常值可能暗示类加载器泄漏或动态代理滥用。
jvm.classes.unloaded
作用:记录 JVM 生命周期内已卸载的类总数。
意义:正常情况下卸载数较低,频繁卸载可能影响性能(如热部署场景)。
已加载/卸载的类数量,异常值可能暗示类加载器泄漏或动态代理滥用。
jvm.gc.live.data.size
老年代存活数据大小(反映内存碎片情况)
jvm.gc.max.data.size
功能:垃圾回收管理的最大内存区域容量(例如老年代最大空间)。
分析:若 jvm.memory.used 持续接近此值,可能触发频繁 Full GC,需优化对象生命周期或扩容堆内存。
场景:结合 jvm.gc.pause 判断是否因内存不足导致 GC 效率下降。
jvm.gc.memory.allocated
GC 期间分配的内存总量
Young GC 时年轻代分配的内存空间,反映对象创建速率。
jvm.gc.memory.promoted
Young GC 后晋升到老年代的内存大小,用于分析对象生命周期合理性。
显示 Young GC 后晋升到老年代的内存大小,用于分析对象生命周期
jvm.gc.pause
内存泄漏 jvm.memory.used + jvm.gc.pause 分析堆内存增长与 Full GC 频率
GC 耗时(jvm.gc.pause)及堆内存分配情况
GC 暂停时间(用于分析垃圾回收效率)
GC 暂停时间,衡量垃圾回收效率(如频繁 Full GC 可能引发性能问题)。
**Allocation Failure**:内存分配失败(常见于年轻代空间不足时触发Minor GC)。
**end of minor GC**:年轻代GC(Minor GC)结束。
**end of major GC**:老年代GC(Major/Full GC)结束。
jvm.memory.committed
已提交内存量(JVM 向操作系统申请的物理内存),反映实际资源占用。
jvm.memory.max
查看 JVM 最大内存
JVM 最大可用内存
JVM 可分配的最大内存,对比 used 可计算内存利用率。
jvm.memory.used
当前 JVM 内存使用量(堆/非堆)
内存泄漏 jvm.memory.used + jvm.gc.pause 分析堆内存增长与 Full GC 频率
当前 JVM 内存使用量(堆/非堆),用于实时监控内存泄漏或溢出风险。
示例:若堆内存持续增长且无下降趋势,可能存在内存泄漏。
jvm.threads.daemon
功能:当前 JVM 守护线程数量(如垃圾回收线程)。
分析:若守护线程数异常增加(如远高于默认值),可能因线程池配置错误或框架内部泄漏。
场景:对比 jvm.threads.live 分析线程总数是否合理。
jvm.threads.live
当前活跃线程数(排查线程泄漏)
结合 jvm.threads.live 和 tomcat.threads.busy 诊断线程阻塞问题
高并发性能瓶颈 jvm.threads.live、system.cpu.usage 检测线程阻塞或 CPU 过载
当前活跃线程数,突增可能因线程泄漏或任务阻塞。
高并发线程阻塞 jvm.threads.live + jvm.threads.states 优化锁机制或线程池配置
jvm.threads.peak
历史峰值线程数
jvm.threads.states
按状态(BLOCKED、WAITING 等)分类的线程数量
作用:按线程状态(如 BLOCKED、WAITING、RUNNABLE)分类统计线程数量。
排查场景:
BLOCKED 线程过多:可能由锁竞争或同步瓶颈导致。
WAITING 线程堆积:常见于任务队列处理能力不足。
按状态(BLOCKED/WAITING/RUNNABLE)统计线程数,排查锁竞争或任务队列积压。
高并发线程阻塞 jvm.threads.live + jvm.threads.states 优化锁机制或线程池配置
logback.events
记录 Logback 日志事件数量(如 INFO/WARN/ERROR 级别日志统计)
作用:统计 Logback 日志框架输出的不同级别日志事件数量(如 INFO、WARN、ERROR)。
配置:需依赖 micrometer-core 和 Logback 集成,自动记录日志频率。
示例:监控 ERROR 级别日志的突发增长,触发告警机制。
日志级别统计(INFO/WARN/ERROR),监控日志风暴或异常频率。
process.cpu.usage
当前进程 CPU 占用
当前进程 CPU 占用,结合线程指标分析热点代码。
process.files.max
功能:操作系统允许进程打开的最大文件句柄数。
分析:若 process.files.open 接近此值,可能导致 "Too many open files" 错误,需调整系统限制(ulimit)或检查文件泄漏。
process.files.open
功能:当前进程已打开的文件句柄数(包括 Socket、日志文件等)。
分析:持续增长可能因未正确关闭资源(如数据库连接、流未释放)。
process.files.open process.files.max process.files.open / process.files.max > 0.8
process.start.time
进程启动时间戳
作用:记录应用进程启动的时间戳(Unix 时间戳格式)。
用途:用于计算应用运行时长,或与其他时间序列数据关联分析。
启动时间戳,用于计算运行周期。
process.uptime
应用运行时长(秒)
作用:显示应用已运行的时长(单位:秒)。
示例:结合告警系统,监控长时间运行的进程是否存在内存泄漏。
应用持续运行时间,长期运行需关注内存泄漏。
system.cpu.count
CPU 核心数,用于资源扩容决策。
CPU 核心数(用于资源规划)
system.cpu.usage
系统整体 CPU 使用率
高并发性能瓶颈 jvm.threads.live、system.cpu.usage 检测线程阻塞或 CPU 过载
系统整体 CPU 使用率,超 80% 需警惕资源瓶颈。
HTTP 接口性能瓶颈 http.server.requests.max + system.cpu.usage 代码热点分析或横向扩容
system.load.average.1m
功能:系统过去 1 分钟的平均负载(单位:核心数占比)。
分析:
负载值 > CPU 核心数表示系统过载。
若负载高但 system.cpu.usage 低,可能因 I/O 阻塞或锁竞争。
场景:结合 jvm.threads.states 判断是否因线程阻塞导致负载堆积。
system.load.average.1m system.cpu.usage system.load.average.1m > (system.cpu.count * 2)
tomcat.sessions.active.current
活跃会话数
当前活跃会话数
当前活跃会话数,评估用户并发量。
tomcat.sessions.active.max
功能:历史活跃会话数的峰值。
分析:对比当前活跃会话数(tomcat.sessions.active.current),评估系统承载能力是否需扩容。
tomcat.sessions.alive.max
作用:统计会话存活时间的最大值,反映用户会话的活跃程度。
优化建议:若该值过高,需检查会话超时配置是否合理。
tomcat.sessions.created
功能:自应用启动以来创建的会话总数。
分析:
高频会话创建(如每秒数百次)可能因无 Session 复用(如未设置 Cookie)或遭受攻击。
结合 tomcat.sessions.expired 优化会话超时时间。
tomcat.sessions.expired
过期会话数(用于会话超时配置优化)
过期会话数,优化会话超时配置。
tomcat.sessions.rejected
因超出最大限制被拒绝的会话数
Tomcat 会话管理 tomcat.sessions.rejected 调整 server.tomcat.max-sessions 配置
作用:记录因超出 Tomcat 最大会话数限制而被拒绝创建的会话数量。
调优方向:调整 server.tomcat.max-sessions 参数或优化会话管理策略。
Tomcat 会话过载 tomcat.sessions.rejected 调整 max-sessions 参数
因超出最大会话数被拒绝的请求数,需调整 server.tomcat.max-sessions。