以下の内容はhttps://devlights.hatenablog.com/entry/2025/05/12/073000より取得しました。


Goメモ-572 (gopsutilを利用してメモリ使用量を取得)(mem.VirtualMemory)

関連記事

GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ

概要

以下、自分用のメモです。

たまにCPU使用率やメモリ使用量を取得して評価する必要があったりします。

シェルスクリプトなどでちょこっと作成して流したりするのが一番多いのですが、Goで作成したいときもあったりします。

そういう場合、gopsutilというとても便利なライブラリが以下で公開されています。

github.com

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のおすすめ書籍


過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。




以上の内容はhttps://devlights.hatenablog.com/entry/2025/05/12/073000より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14