いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

Goメモ-573 (gopsutilを利用してメモリ使用量を取得)(mem.NewExLinux, mem.NewExWindows, v4.24.5から追加)

関連記事

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

概要

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

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

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

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

github.com

Pythonの psutil をGoに移植してくださっているライブラリ。

とても使いやすいです。

サンプル(メモリ使用量)

v4.24.5から追加されたEx構造体を利用して追加情報を取得するサンプルです。

main.go

//go:build linux

package main

import (
    "log"

    "github.com/shirou/gopsutil/v4/mem"
)

func main() {
    log.SetFlags(log.Ltime)

    if err := run(); err != nil {
        log.Fatal(err)
    }
}

func run() error {
    var (
        vmem   *mem.VirtualMemoryStat
        exVmem *mem.ExVirtualMemory
        err    error
    )
    // マルチプラットフォームで利用出来る方法
    vmem, err = mem.VirtualMemory()
    if err != nil {
        return err
    }

    // 各OSごとに特化している情報を取得する方法
    exVmem, err = mem.NewExLinux().VirtualMemory()
    if err != nil {
        return err
    }

    log.Printf("[NORMAL] %s", vmem)
    log.Printf("[EX    ] %s", exVmem)

    return nil
}

実行結果

$ task
task: [clean] rm -f ./app
task: [build] go build -o app .
task: [run] ./app
07:40:14 [NORMAL] {"total":67421265920,"available":52788764672,"used":13726756864,"usedPercent":20.359684257913145,"free":31725797376,"active":6271885312,"inactive":21599387648,"wired":0,"laundry":0,"buffers":1032192,"cached":21967679488,"writeBack":0,"dirty":3129344,"writeBackTmp":0,"shared":158375936,"slab":5851881472,"sreclaimable":3740106752,"sunreclaim":2111774720,"pageTables":174186496,"swapCached":22228992,"commitLimit":436363812864,"committedAS":31354429440,"highTotal":0,"highFree":0,"lowTotal":0,"lowFree":0,"swapTotal":402653179904,"swapFree":402577944576,"mapped":1446465536,"vmallocTotal":35184372087808,"vmallocUsed":204656640,"vmallocChunk":0,"hugePagesTotal":0,"hugePagesFree":0,"hugePagesRsvd":0,"hugePagesSurp":0,"hugePageSize":2097152,"anonHugePages":12582912}
07:40:14 [EX    ] {"activefile":5806538752,"inactivefile":12259991552,"activeanon":465346560,"inactiveanon":9339396096,"unevictable":87674880}

参考情報

try-golang/examples/psutil/mem/exmem at main · devlights/try-golang · GitHub

Goのおすすめ書籍


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

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