Skip to content

Commit 6195981

Browse files
authored
Merge pull request #918 from devlights/add-psutil-mem-example
2 parents b9cf342 + 558efca commit 6195981

File tree

4 files changed

+96
-0
lines changed

4 files changed

+96
-0
lines changed

examples/psutil/mem/vmem/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
app

examples/psutil/mem/vmem/README.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# これは何?
2+
3+
[gopsutil](https://github.com/shirou/gopsutil)を用いてメモリ消費量を取得するサンプルです。
4+
5+
```sh
6+
$ task
7+
task: [build] go build -o app main.go
8+
task: [run] ./app
9+
07:25:17 Total=7938MB Used=1569MB Free= 417MB
10+
07:25:18 Total=7938MB Used=1722MB Free= 264MB
11+
07:25:19 Total=7938MB Used=1850MB Free= 187MB
12+
07:25:20 Total=7938MB Used=1886MB Free= 151MB
13+
07:25:21 Total=7938MB Used=1886MB Free= 151MB
14+
```

examples/psutil/mem/vmem/Taskfile.yml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# https://taskfile.dev
2+
3+
version: '3'
4+
5+
tasks:
6+
default:
7+
cmds:
8+
- task: build
9+
- task: run
10+
build:
11+
cmds:
12+
- go build -o app main.go
13+
run:
14+
cmds:
15+
- ./app

examples/psutil/mem/vmem/main.go

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package main
2+
3+
import (
4+
"log"
5+
"time"
6+
7+
"github.com/shirou/gopsutil/v4/mem"
8+
)
9+
10+
func main() {
11+
log.SetFlags(log.Ltime)
12+
13+
if err := run(); err != nil {
14+
log.Fatal(err)
15+
}
16+
}
17+
18+
func run() error {
19+
const (
20+
COUNT = 5
21+
)
22+
var (
23+
interval = 1 * time.Second
24+
mb = func(v uint64) uint64 {
25+
// 概算値で良いので整数除算
26+
return v >> 20
27+
}
28+
done = make(chan struct{})
29+
useMem = func(done <-chan struct{}, ready chan<- struct{}, bufSize uint64) {
30+
buf := make([]byte, bufSize)
31+
for i := range len(buf) {
32+
buf[i] = 0
33+
}
34+
35+
close(ready)
36+
<-done
37+
}
38+
)
39+
for range COUNT {
40+
// 現在のメモリ量を取得
41+
var (
42+
vms *mem.VirtualMemoryStat
43+
err error
44+
)
45+
vms, err = mem.VirtualMemory()
46+
if err != nil {
47+
return err
48+
}
49+
50+
log.Printf("Total=%4dMB\tUsed=%4dMB\tFree=%4dMB", mb(vms.Total), mb(vms.Used), mb(vms.Free))
51+
52+
// 意図的にメモリを占有していく
53+
var (
54+
ready = make(chan struct{})
55+
)
56+
go useMem(done, ready, 150<<20)
57+
<-ready
58+
59+
time.Sleep(interval)
60+
}
61+
62+
close(done)
63+
time.Sleep(500 * time.Millisecond)
64+
65+
return nil
66+
}

0 commit comments

Comments
 (0)