SapMachine Vitals 监控工具概述
SapMachine 是 OpenJDK 的一个下游发行版,最近引入了一个名为 SapMachine Vitals 的新监控工具。该工具用于记录操作系统和 JVM 的统计信息,默认情况下是激活的。它能够提供堆使用情况、元空间大小、容器内存统计和限制、加载的类数量以及创建的线程数量等信息。
Vitals 的主要功能与特点
数据采集与存储:
- Vitals 结合了 sysstat 操作系统工具和 JVM 统计信息,默认每十秒采集一次数据。
- 数据在 JVM 内部缓冲存储十天,其中最近一小时的记录更为详细。
性能开销:
- Vitals 的内存消耗约为 300 KB,CPU 消耗较低。
- 用户可以通过
-XX:-EnableVitals命令禁用该功能。
报告生成:
- 使用
jcmd <pid> VM.vitals命令可以为正在运行的应用程序生成报告。 - 报告还会包含在 JVM 异常退出时生成的
hs_err_pid.log文件中。 - 启动 JVM 时,使用
-XX:+PrintVitalsAtExit参数可以在退出前将 Vitals 报告打印到标准输出。 - 使用
-XX:+DumpVitalsAtExit参数可以生成sapmachine_vitals_pid.txt和sapmachine_vitals_pid.csv文件。文件名可以通过-XX:VitalsFile=<custom-filename>参数自定义。
- 使用
报告内容:
- Vitals 报告分为三个部分:系统和容器统计、进程统计、JVM 统计。
- 每个部分包含一系列指标及其缩写,报告末尾以列的形式列出指标,行中显示测量值。
系统与容器统计
指标列表:
- avail:可用内存(不含交换空间)
- comm:已提交内存
- crt:已提交内存与提交限制的比率
- swap:使用的交换空间
- si/so:交换进/出的页面数量
- p/t/tr/tb:进程数、线程数、运行中的线程数、因磁盘 IO 阻塞的线程数
- cpu-us/sy/id/st/gu:CPU 用户时间、系统时间、空闲时间、被盗时间、客户时间
- cgroup-lim/slim/usg/kusg:cgroup 内存限制、软限制、使用量、内核内存使用量(仅 cgroup v1)
测量值示例:
2023-02-14 19:51:57 25,7g 11,4g 64 0k 0 0 305 804 1 0 3 1 95 0 0 0k 64m进程统计
指标列表:
- virt:虚拟大小
- rss-all/anon/file/shm:常驻集大小(总大小、匿名内存、文件映射、共享内存)
- swdo:交换出的内存
- cheap-usd/free:C-Heap 使用量、空闲块大小
- cpu-us/sy:进程 CPU 用户时间、系统时间
- io-of/rd/wr:打开的文件数量、读取的字节数、写入的字节数
- thr:本地线程数量
测量值示例:
10,9g 85m 50m 35m 0k 0k 24m 9m 0 0 6 76k 0k 20JVM 统计
指标列表:
- heap-comm/used:Java 堆大小(已提交、已使用)
- meta-comm/used/csc/csu/gctr:元空间大小(已提交、已使用、类空间大小、GC 阈值)
- code:代码缓存(已提交)
- nmt-mlc/map/gc/oth/ovh:HotSpot 分配的内存、映射的内存、GC 开销、其他内存、NMT 开销
- jthr-num/nd/cr/st:Java 线程数量、非守护线程数量、创建的线程数量、线程栈总大小
- cldg-num/anonymous:类加载器数据、匿名类加载器
- cls-num/ld/uld:类数量、加载的类数量、卸载的类数量
测量值示例:
508m 23m 9m 9m 1m 1m 21m 7m 11 1 0 36 32 2515 0 0Vitals 的可用性与背景
- Vitals 功能仅作为 SapMachine 版本的 OpenJDK 的一部分提供。
- SAP 的 JVM 工程师 Thomas Stuefe 表示,该功能未被上游 OpenJDK 接受,因为其功能与 Java Flight Recorder 有重叠。
- 更多信息可以在 GitHub 和 SapMachine Vitals 博客 中找到。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。