かまたま日記3

プログラミングメイン、たまに日常

runtime.MemStatsを使ってリアルタイムにメモリ使用量を確認する

runtime.MemStats を使うと現時点でのメモリの使用状況などを確認できます。

とりあえず、以下のようなコードを埋めるとAlloc (割り当てられたヒープオブジェクトのバイト数) とNumGC (GCの回数) を確認できます。ついでに期間中の最大のAllocも確認しています。

その他必要なデータはMemStatsのドキュメントを読みながら適宜追加すること。

package main

import (
    "log"
    "runtime"
    "time"
)

func main() {
    tick := time.NewTicker(2 * time.Second)
    defer tick.Stop()
    go func() {
        var maxAlloc uint64
        for range tick.C {
            var s runtime.MemStats
            runtime.ReadMemStats(&s)
            toMB := func(v uint64) uint64 {
                return v / (1024 * 1024)
            }
            alloc := s.Alloc
            if maxAlloc < alloc {
                maxAlloc = alloc
            }
            log.Println("===============================")
            log.Printf("Alloc: %d\n", toMB(alloc))
            log.Printf("MaxAlloc: %d\n", toMB(maxAlloc))
            log.Printf("NumGC: %d\n", s.NumGC)
            log.Println("===============================")
        }
    }()

    someMemoryBoundFunction()
}