Skip to content

Commit

Permalink
Track JVM gc time in histogram (open-telemetry#2903)
Browse files Browse the repository at this point in the history
  • Loading branch information
jack-berg authored Nov 15, 2022
1 parent a2d06cf commit a2337b0
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 22 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,8 @@ release.
([#2881](https://github.com/open-telemetry/opentelemetry-specification/pull/2881))
- Add `process.runtime.jvm.memory.usage_after_last_gc` metric to semantic conventions.
([#2901](https://github.com/open-telemetry/opentelemetry-specification/pull/2901))
- Add `process.runtime.jvm.gc.duration` metric to semantic conventions.
([#2903](https://github.com/open-telemetry/opentelemetry-specification/pull/2903))

### Compatibility

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,30 +61,46 @@ consider, for example pthreads vs green thread implementations.

All JVM metric attributes are required unless otherwise indicated.

| Name | Description | Unit | Unit ([UCUM](README.md#instrument-units)) | Instrument Type ([*](README.md#instrument-types)) | Value Type | Attribute Key | Attribute Values |
|------------------------------------------------|-------------------------------------------------------------------------------------------------|---------|-------------------------------------------|---------------------------------------------------|------------|---------------|-----------------------|
| process.runtime.jvm.memory.usage | Measure of memory used | Bytes | `By` | UpDownCounter | Int64 | type | `"heap"`, `"nonheap"` |
| | | | | | | pool | Name of pool [1] |
| process.runtime.jvm.memory.init | Measure of initial memory requested | Bytes | `By` | UpDownCounter | Int64 | type | `"heap"`, `"nonheap"` |
| | | | | | | pool | Name of pool [1] |
| process.runtime.jvm.memory.committed | Measure of memory committed | Bytes | `By` | UpDownCounter | Int64 | type | `"heap"`, `"nonheap"` |
| | | | | | | pool | Name of pool [1] |
| process.runtime.jvm.memory.limit | Measure of max obtainable memory | Bytes | `By` | UpDownCounter | Int64 | type | `"heap"`, `"nonheap"` |
| | | | | | | pool | Name of pool [1] |
| process.runtime.jvm.memory.usage_after_last_gc | Measure of memory used, as measured after the most recent garbage collection event on this pool | Bytes | `By` | UpDownCounter | Int64 | type | `"heap"`, `"nonheap"` |
| | | | | | | pool | Name of pool [1] |
| process.runtime.jvm.threads.count | Number of executing threads | threads | `{threads}` | UpDownCounter | Int64 | daemon | `true`, `false` |
| process.runtime.jvm.classes.loaded | Number of classes loaded since JVM start | classes | `{classes}` | Counter | Int64 | | |
| process.runtime.jvm.classes.unloaded | Number of classes unloaded since JVM start | classes | `{classes}` | Counter | Int64 | | |
| process.runtime.jvm.classes.current_loaded | Number of classes currently loaded | classes | `{classes}` | UpDownCounter | Int64 | | |
| process.runtime.jvm.cpu.utilization | Recent CPU utilization for the process [2] | 1 | 1 | Asynchronous Gauge | Double | | |
| process.runtime.jvm.system.cpu.utilization | Recent CPU utilization for the whole system [2] | 1 | 1 | Asynchronous Gauge | Double | | |
| process.runtime.jvm.system.cpu.load_1m | Average CPU load of the whole system for the last minute | 1 | 1 | Asynchronous Gauge | Double | | |
| process.runtime.jvm.buffer.usage | Measure of memory used by buffers | Bytes | `By` | UpDownCounter | Int64 | pool | Name of pool[3] |
| process.runtime.jvm.buffer.limit | Measure of total memory capacity of buffers | Bytes | `By` | UpDownCounter | Int64 | pool | Name of pool[3] |
| process.runtime.jvm.buffer.count | Number of buffers in the pool | buffers | `{buffers}` | UpDownCounter | Int64 | pool | Name of pool[3] |
| Name | Description | Unit | Unit ([UCUM](README.md#instrument-units)) | Instrument Type ([*](README.md#instrument-types)) | Value Type | Attribute Key | Attribute Values |
|------------------------------------------------|-------------------------------------------------------------------------------------------------|--------------|-------------------------------------------|---------------------------------------------------|------------|---------------|-----------------------|
| process.runtime.jvm.memory.usage | Measure of memory used | Bytes | `By` | UpDownCounter | Int64 | type | `"heap"`, `"nonheap"` |
| | | | | | | pool | Name of pool [1] |
| process.runtime.jvm.memory.init | Measure of initial memory requested | Bytes | `By` | UpDownCounter | Int64 | type | `"heap"`, `"nonheap"` |
| | | | | | | pool | Name of pool [1] |
| process.runtime.jvm.memory.committed | Measure of memory committed | Bytes | `By` | UpDownCounter | Int64 | type | `"heap"`, `"nonheap"` |
| | | | | | | pool | Name of pool [1] |
| process.runtime.jvm.memory.limit | Measure of max obtainable memory | Bytes | `By` | UpDownCounter | Int64 | type | `"heap"`, `"nonheap"` |
| | | | | | | pool | Name of pool [1] |
| process.runtime.jvm.memory.usage_after_last_gc | Measure of memory used, as measured after the most recent garbage collection event on this pool | Bytes | `By` | UpDownCounter | Int64 | type | `"heap"`, `"nonheap"` |
| | | | | | | pool | Name of pool [1] |
| process.runtime.jvm.threads.count | Number of executing threads | threads | `{threads}` | UpDownCounter | Int64 | daemon | `true`, `false` |
| process.runtime.jvm.classes.loaded | Number of classes loaded since JVM start | classes | `{classes}` | Counter | Int64 | | |
| process.runtime.jvm.classes.unloaded | Number of classes unloaded since JVM start | classes | `{classes}` | Counter | Int64 | | |
| process.runtime.jvm.classes.current_loaded | Number of classes currently loaded | classes | `{classes}` | UpDownCounter | Int64 | | |
| process.runtime.jvm.cpu.utilization | Recent CPU utilization for the process [2] | 1 | 1 | Asynchronous Gauge | Double | | |
| process.runtime.jvm.system.cpu.utilization | Recent CPU utilization for the whole system [2] | 1 | 1 | Asynchronous Gauge | Double | | |
| process.runtime.jvm.system.cpu.load_1m | Average CPU load of the whole system for the last minute | 1 | 1 | Asynchronous Gauge | Double | | |
| process.runtime.jvm.buffer.usage | Measure of memory used by buffers | Bytes | `By` | UpDownCounter | Int64 | pool | Name of pool[3] |
| process.runtime.jvm.buffer.limit | Measure of total memory capacity of buffers | Bytes | `By` | UpDownCounter | Int64 | pool | Name of pool[3] |
| process.runtime.jvm.buffer.count | Number of buffers in the pool | buffers | `{buffers}` | UpDownCounter | Int64 | pool | Name of pool[3] |
| process.runtime.jvm.gc.duration | Duration of JVM garbage collection actions | Milliseconds | `ms` | Histogram | Int64 | gc | Name of gc[4] |
| | | | | | | action | The gc action[4] |

**[1]**: Pool names are generally obtained via [MemoryPoolMXBean#getName()](https://docs.oracle.com/en/java/javase/11/docs/api/java.management/java/lang/management/MemoryPoolMXBean.html#getName()).
Examples include `G1 Old Gen`, `G1 Eden space`, `G1 Survivor Space`, `Metaspace`, etc.

**[2]**: These utilizations are not defined as being for the specific interval since last measurement (unlike `system.cpu.utilization`).

**[3]**: Pool names are generally obtained via [BufferPoolMXBean#getName()](https://docs.oracle.com/en/java/javase/11/docs/api/java.management/java/lang/management/BufferPoolMXBean.html#getName()).

**[4]**: Garbage collector name and action are generally obtained via [GarbageCollectionNotificationInfo#getGcName()](https://docs.oracle.com/en/java/javase/11/docs/api/jdk.management/com/sun/management/GarbageCollectionNotificationInfo.html#getGcName()) and [GarbageCollectionNotificationInfo#getGcAction()](https://docs.oracle.com/en/java/javase/11/docs/api/jdk.management/com/sun/management/GarbageCollectionNotificationInfo.html#getGcAction()) respectively. The following is an incomplete list of names and actions for several popular garbage collectors:

* G1 Garbage Collector
* Names: `G1 Young Generation`, `G1 Old Generation`
* Actions: `end of minor GC`, `end of major GC`
* Shenandoah Garbage Collector
* Names: `Shenandoah Cycles`, `Shenandoah Pauses`
* Actions: `end of GC cycle`, `end of GC pause`
* Z Garbage Collector
* Names: `ZGC Cycles`, `ZGC Pauses`
* Actions: `end of GC cycle`, `end of GC pause`

0 comments on commit a2337b0

Please sign in to comment.