いろいろ備忘録日記

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

Goメモ-575 (procfsを利用してメモリ使用量を取得)(procfs.FS, MemInfo)

関連記事

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

概要

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

Linux上でCPUやメモリやプロセスの情報を取得したりして処理する必要があったので、ちょっとライブラリを探してみたら

github.com

という便利なライブラリが見つかりました。/procファイルシステムの情報を扱いやすくしてくれます。

とても便利だったので、自分用に使い方のメモ残しておこうと思います。

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

main.go

package main

import (
    "log"

    "github.com/prometheus/procfs"
)

func main() {
    log.SetFlags(0)

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

func run() error {
    var (
        fs  procfs.FS
        err error
    )
    fs, err = procfs.NewDefaultFS() // デフォルトは /proc を見ている
    if err != nil {
        return err
    }

    var (
        mem procfs.Meminfo
    )
    mem, err = fs.Meminfo()
    if err != nil {
        return err
    }

    var (
        memTotal        = *mem.MemTotal          // システムに搭載されている物理メモリ(RAM)の総量をkB単位
        memTotalBytes   = *mem.MemTotalBytes     // システムに搭載されている物理メモリ(RAM)の総量をバイト単位
        freeTotal       = *mem.MemFree           // 空き容量をKB表示
        freeTotalBytes  = *mem.MemFreeBytes      // 空き容量をバイト単位
        availTotal      = *mem.MemAvailable      // 利用可能容量をKB表示
        availTotalBytes = *mem.MemAvailableBytes // 利用可能容量をバイト単位
        toMB            = func(v uint64) uint64 { return v >> 20 }
    )
    log.Printf("MemTotal=%dKB(%dMB), Free=%dKB(%dMB), Avail=%dKB(%dMB)",
        memTotal, toMB(memTotalBytes), freeTotal, toMB(freeTotalBytes), availTotal, toMB(availTotalBytes))

    return nil
}

実行結果

$ task
task: [clean] rm -f ./app
task: [build] go build -o app .
task: [run] free | head -n 2
               total        used        free      shared  buff/cache   available
Mem:        65841080    18350600     6361292      129440    41129188    46633780
task: [run] ./app
MemTotal=65841080KB(64297MB), Free=6358804KB(6209MB)

参考情報

try-golang/examples/procfs/meminfo at main · devlights/try-golang · GitHub

Goのおすすめ書籍


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

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