関連記事
GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ
概要
以下、自分用のメモです。
たまにCPU使用率やメモリ使用量を取得して評価する必要があったりします。
シェルスクリプトなどでちょこっと作成して流したりするのが一番多いのですが、Goで作成したいときもあったりします。
そういう場合、gopsutilというとても便利なライブラリが以下で公開されています。
Pythonの psutil をGoに移植してくださっているライブラリ。
とても使いやすいです。
サンプル(メモリ使用量)
main.go
package main import ( "log" "time" "github.com/shirou/gopsutil/v4/mem" ) func main() { log.SetFlags(log.Ltime) if err := run(); err != nil { log.Fatal(err) } } func run() error { const ( COUNT = 5 ) var ( interval = 1 * time.Second mb = func(v uint64) uint64 { // 概算値で良いので整数除算 return v >> 20 } done = make(chan struct{}) useMem = func(done <-chan struct{}, ready chan<- struct{}, bufSize uint64) { buf := make([]byte, bufSize) for i := range len(buf) { buf[i] = 0 } close(ready) <-done } ) for range COUNT { // 現在のメモリ量を取得 var ( vms *mem.VirtualMemoryStat err error ) vms, err = mem.VirtualMemory() if err != nil { return err } log.Printf("Total=%4dMB\tUsed=%4dMB\tFree=%4dMB", mb(vms.Total), mb(vms.Used), mb(vms.Free)) // 意図的にメモリを占有していく var ( ready = make(chan struct{}) ) go useMem(done, ready, 150<<20) <-ready time.Sleep(interval) } close(done) time.Sleep(500 * time.Millisecond) return nil }
実行結果
$ task task: [build] go build -o app main.go task: [run] ./app 07:25:17 Total=7938MB Used=1569MB Free= 417MB 07:25:18 Total=7938MB Used=1722MB Free= 264MB 07:25:19 Total=7938MB Used=1850MB Free= 187MB 07:25:20 Total=7938MB Used=1886MB Free= 151MB 07:25:21 Total=7938MB Used=1886MB Free= 151MB
参考情報
try-golang/examples/psutil/mem/vmem at main · devlights/try-golang · GitHub
Goのおすすめ書籍
過去の記事については、以下のページからご参照下さい。
サンプルコードは、以下の場所で公開しています。