Skip to content

Commit a93e121

Browse files
authored
Merge pull request #808 from devlights/add-runtime-metrics-example
2 parents 749aaf9 + fa6ca04 commit a93e121

File tree

3 files changed

+123
-0
lines changed

3 files changed

+123
-0
lines changed

examples/basic/metricsop/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,4 @@
55
| file | example name | note |
66
| ------------- | ------------------ | ----------------------------------------------------------------------- |
77
| heapmemory.go | metrics_heapmemory | runtime/metrics を利用してヒープメモリ関連の情報を取得するサンプルです. |
8+
| cpu.go | metrics_cpu | runtime/metrics を利用してCPU関連の情報を取得するサンプルです. |

examples/basic/metricsop/cpu.go

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
package metricsop
2+
3+
import (
4+
"context"
5+
"math"
6+
"runtime"
7+
"runtime/metrics"
8+
"time"
9+
10+
"github.com/devlights/gomy/output"
11+
)
12+
13+
// Cpu は、runtime/metrics を利用してCPU関連の情報を取得するサンプルです.
14+
//
15+
// # REFERENCES
16+
// - https://pkg.go.dev/runtime/metrics@latest
17+
func Cpu() error {
18+
var (
19+
items = []string{
20+
"/cgo/go-to-c-calls:calls", // 現在のプロセスによるGoからCへの呼び出し回数
21+
"/cpu/classes/gc/mark/assist:cpu-seconds", // ゴルーチンがGCを実行するのに費やしたCPU時間の見積もり
22+
"/cpu/classes/gc/mark/dedicated:cpu-seconds", // GCタスクを実行するために費やされたCPU時間の合計の見積もり
23+
"/cpu/classes/gc/mark/idle:cpu-seconds", // GCタスクの実行に費やされたCPU時間の合計の見積もり
24+
"/cpu/classes/gc/pause:cpu-seconds", // GCによって一時停止されたアプリケーションに費やされた推定総CPU時間
25+
"/cpu/classes/gc/total:cpu-seconds", // GCタスクの実行に費やされたCPU時間の見積もり
26+
"/cpu/classes/idle:cpu-seconds", // GoまたはGoランタイムコードの実行に使用されないCPU時間の推定値
27+
"/cpu/classes/total:cpu-seconds", // ユーザーGoコードまたはGoランタイムに使用可能なCPU時間の合計
28+
"/cpu/classes/user:cpu-seconds", // ユーザーGoコードの実行に費やされたCPU時間の合計の見積もり
29+
}
30+
samples = make([]metrics.Sample, len(items))
31+
bigdata = make([]byte, 1<<28)
32+
)
33+
34+
for i, name := range items {
35+
samples[i].Name = name
36+
}
37+
38+
var (
39+
ctx, cxl = context.WithTimeout(context.Background(), 1*time.Second)
40+
ready = make(chan bool)
41+
busyfn = func(ctx context.Context, ready chan<- bool) {
42+
var i uint64
43+
44+
ready <- true
45+
for {
46+
select {
47+
case <-ctx.Done():
48+
return
49+
default:
50+
switch i {
51+
case math.MaxUint64:
52+
i = 0
53+
default:
54+
i += uint64(1)
55+
}
56+
}
57+
}
58+
}
59+
)
60+
defer cxl()
61+
62+
go busyfn(ctx, ready)
63+
<-ready
64+
65+
runtime.GC()
66+
metrics.Read(samples)
67+
68+
for _, s := range samples {
69+
output.Stdoutl("[Name ]", s.Name)
70+
output.Stdoutf("[Value]", "%+v\n", s.Value)
71+
output.StdoutHr()
72+
}
73+
74+
output.Stdoutl("[Buffer]", len(bigdata))
75+
76+
<-ctx.Done()
77+
78+
return nil
79+
80+
/*
81+
$ task
82+
task: [build] go build .
83+
task: [run] ./try-golang -onetime
84+
85+
ENTER EXAMPLE NAME: metrics_cpu
86+
87+
[Name] "metrics_cpu"
88+
[Name ] /cgo/go-to-c-calls:calls
89+
[Value] {kind:1 scalar:1 pointer:<nil>}
90+
--------------------------------------------------
91+
[Name ] /cpu/classes/gc/mark/assist:cpu-seconds
92+
[Value] {kind:2 scalar:4551153223746165794 pointer:<nil>}
93+
--------------------------------------------------
94+
[Name ] /cpu/classes/gc/mark/dedicated:cpu-seconds
95+
[Value] {kind:2 scalar:4562351584908057236 pointer:<nil>}
96+
--------------------------------------------------
97+
[Name ] /cpu/classes/gc/mark/idle:cpu-seconds
98+
[Value] {kind:2 scalar:0 pointer:<nil>}
99+
--------------------------------------------------
100+
[Name ] /cpu/classes/gc/pause:cpu-seconds
101+
[Value] {kind:2 scalar:4566896090190411183 pointer:<nil>}
102+
--------------------------------------------------
103+
[Name ] /cpu/classes/gc/total:cpu-seconds
104+
[Value] {kind:2 scalar:4569689296178052284 pointer:<nil>}
105+
--------------------------------------------------
106+
[Name ] /cpu/classes/idle:cpu-seconds
107+
[Value] {kind:2 scalar:4630569171334083814 pointer:<nil>}
108+
--------------------------------------------------
109+
[Name ] /cpu/classes/total:cpu-seconds
110+
[Value] {kind:2 scalar:4630572714109167296 pointer:<nil>}
111+
--------------------------------------------------
112+
[Name ] /cpu/classes/user:cpu-seconds
113+
[Value] {kind:2 scalar:4581969798399309374 pointer:<nil>}
114+
--------------------------------------------------
115+
[Buffer] 268435456
116+
117+
118+
[Elapsed] 1.002128694s
119+
*/
120+
121+
}

examples/basic/metricsop/examples.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,5 @@ func NewRegister() mapping.Register {
1414
// Regist -- 登録します.
1515
func (r *register) Regist(m mapping.ExampleMapping) {
1616
m["metrics_heapmemory"] = HeapMemory
17+
m["metrics_cpu"] = Cpu
1718
}

0 commit comments

Comments
 (0)