memstat HeapInuse 和 TotalAlloc 需要解释一下

我想转储 golang memstat


package main


import (

    "fmt"

    "github.com/dustin/go-humanize"

    "runtime"

    "time"

)


func main() {

    for {

        var mem = new(runtime.MemStats)

        runtime.ReadMemStats(mem)

        fmt.Println("HeapInuse:", humanize.Bytes(mem.HeapInuse), "TotalAlloc:", humanize.Bytes(mem.TotalAlloc))


        allocate()

        time.Sleep(100 * time.Millisecond)

    }


}


func allocate() {

    //  0.25MB

    _ = make([]byte, int((1<<20)*0.25))

}


当我转储内存信息时


HeapInuse: 418 kB TotalAlloc: 154 kB ? why  HeapInuse bigger than TotalAlloc

HeapInuse: 688 kB TotalAlloc: 417 kB

HeapInuse: 950 kB TotalAlloc: 680 kB

HeapInuse: 1.2 MB TotalAlloc: 942 kB

HeapInuse: 1.5 MB TotalAlloc: 1.2 MB

HeapInuse: 1.8 MB TotalAlloc: 1.5 MB

HeapInuse: 2.0 MB TotalAlloc: 1.7 MB

HeapInuse: 2.3 MB TotalAlloc: 2.0 MB

HeapInuse: 2.5 MB TotalAlloc: 2.3 MB

HeapInuse: 2.8 MB TotalAlloc: 2.5 MB

HeapInuse: 3.1 MB TotalAlloc: 2.8 MB

HeapInuse: 3.3 MB TotalAlloc: 3.0 MB

HeapInuse: 3.6 MB TotalAlloc: 3.3 MB

HeapInuse: 3.9 MB TotalAlloc: 3.6 MB

HeapInuse: 4.1 MB TotalAlloc: 3.8 MB

HeapInuse: 4.4 MB TotalAlloc: 4.1 MB

HeapInuse: 410 kB TotalAlloc: 4.4 MB

我发现 HeapInuse 比 TotalAlloc 大?但我无法理解原因?我认为 totalAlloc 应该包括 HeapInuse。


慕码人2483693
浏览 163回答 1
1回答

缥缈止盈

让我们阅读下面的官方评论:总分配// TotalAlloc is cumulative bytes allocated for heap objects.//// TotalAlloc increases as heap objects are allocated, but// unlike Alloc and HeapAlloc, it does not decrease when// objects are freed.TotalAlloc uint64&nbsp; &nbsp;堆使用// HeapInuse is bytes in in-use spans.//// In-use spans have at least one object in them. These spans// can only be used for other objects of roughly the same// size.//// HeapInuse minus HeapAlloc estimates the amount of memory// that has been dedicated to particular size classes, but is// not currently being used. This is an upper bound on// fragmentation, but in general this memory can be reused// efficiently.HeapInuse uint64HeapInuse 是分配的内存(来自操作系统),可能不被对象使用TotalAlloc 是为堆对象分配的内存让我们试试HeapAlloc// HeapAlloc is bytes of allocated heap objects.//// "Allocated" heap objects include all reachable objects, as// well as unreachable objects that the garbage collector has// not yet freed. Specifically, HeapAlloc increases as heap// objects are allocated and decreases as the heap is swept// and unreachable objects are freed. Sweeping occurs// incrementally between GC cycles, so these two processes// occur simultaneously, and as a result HeapAlloc tends to// change smoothly (in contrast with the sawtooth that is// typical of stop-the-world garbage collectors).HeapAlloc uint64结果HeapAlloc: 148 kB HeapInuse: 401 kB TotalAlloc: 148 kBHeapAlloc: 412 kB HeapInuse: 664 kB TotalAlloc: 412 kBHeapAlloc: 675 kB HeapInuse: 926 kB TotalAlloc: 675 kBHeapAlloc: 937 kB HeapInuse: 1.2 MB TotalAlloc: 937 kBHeapAlloc: 1.2 MB HeapInuse: 1.5 MB TotalAlloc: 1.2 MBHeapAlloc: 1.5 MB HeapInuse: 1.7 MB TotalAlloc: 1.5 MBHeapAlloc: 1.7 MB HeapInuse: 2.0 MB TotalAlloc: 1.7 MBHeapAlloc: 2.0 MB HeapInuse: 2.2 MB TotalAlloc: 2.0 MBHeapAlloc: 2.2 MB HeapInuse: 2.5 MB TotalAlloc: 2.2 MBHeapAlloc: 2.5 MB HeapInuse: 2.8 MB TotalAlloc: 2.5 MBHeapAlloc: 2.8 MB HeapInuse: 3.0 MB TotalAlloc: 2.8 MBHeapAlloc: 3.0 MB HeapInuse: 3.3 MB TotalAlloc: 3.0 MBHeapAlloc: 3.3 MB HeapInuse: 3.6 MB TotalAlloc: 3.3 MBHeapAlloc: 3.6 MB HeapInuse: 3.8 MB TotalAlloc: 3.6 MBHeapAlloc: 3.8 MB HeapInuse: 4.1 MB TotalAlloc: 3.8 MBHeapAlloc: 4.1 MB HeapInuse: 4.3 MB TotalAlloc: 4.1 MBHeapAlloc: 134 kB HeapInuse: 393 kB TotalAlloc: 4.4 MBHeapAlloc: 398 kB HeapInuse: 664 kB TotalAlloc: 4.6 MBHeapAlloc: 660 kB HeapInuse: 926 kB TotalAlloc: 4.9 MBHeapAlloc: 923 kB HeapInuse: 1.2 MB TotalAlloc: 5.1 MBHeapAlloc: 1.2 MB HeapInuse: 1.4 MB TotalAlloc: 5.4 MBHeapAlloc: 1.4 MB HeapInuse: 1.7 MB TotalAlloc: 5.7 MBHeapAlloc: 1.7 MB HeapInuse: 2.0 MB TotalAlloc: 5.9 MBHeapAlloc: 2.0 MB HeapInuse: 2.2 MB TotalAlloc: 6.2 MBHeapAlloc: 2.2 MB HeapInuse: 2.5 MB TotalAlloc: 6.5 MBHeapAlloc: 2.5 MB HeapInuse: 2.8 MB TotalAlloc: 6.7 MBHeapAlloc: 2.8 MB HeapInuse: 3.0 MB TotalAlloc: 7.0 MBHeapAlloc: 3.0 MB HeapInuse: 3.3 MB TotalAlloc: 7.2 MBHeapAlloc: 3.3 MB HeapInuse: 3.5 MB TotalAlloc: 7.5 MBHeapAlloc: 3.5 MB HeapInuse: 3.8 MB TotalAlloc: 7.8 MBHeapAlloc: 3.8 MB HeapInuse: 4.1 MB TotalAlloc: 8.0 MBHeapAlloc: 4.1 MB HeapInuse: 4.3 MB TotalAlloc: 8.3 MBHeapAlloc: 136 kB HeapInuse: 401 kB TotalAlloc: 8.6 MBHeapAlloc: 400 kB HeapInuse: 664 kB TotalAlloc: 8.8 MBHeapAlloc: 662 kB HeapInuse: 926 kB TotalAlloc: 9.1 MBHeapAlloc: 924 kB HeapInuse: 1.2 MB TotalAlloc: 9.3 MBHeapAlloc: 1.2 MB HeapInuse: 1.4 MB TotalAlloc: 9.6 MBHeapAlloc: 1.4 MB HeapInuse: 1.7 MB TotalAlloc: 9.9 MBHeapAlloc: 1.7 MB HeapInuse: 2.0 MB TotalAlloc: 10 MBHeapAlloc: 2.0 MB HeapInuse: 2.2 MB TotalAlloc: 10 MBHeapAlloc: 2.2 MB HeapInuse: 2.5 MB TotalAlloc: 11 MBHeapAlloc: 2.5 MB HeapInuse: 2.8 MB TotalAlloc: 11 MBHeapAlloc: 2.8 MB HeapInuse: 3.0 MB TotalAlloc: 11 MBHeapAlloc: 3.0 MB HeapInuse: 3.3 MB TotalAlloc: 11 MBHeapAlloc: 3.3 MB HeapInuse: 3.5 MB TotalAlloc: 12 MBHeapAlloc: 3.5 MB HeapInuse: 3.8 MB TotalAlloc: 12 MBHeapAlloc: 3.8 MB HeapInuse: 4.1 MB TotalAlloc: 12 MBHeapAlloc: 4.1 MB HeapInuse: 4.3 MB TotalAlloc: 12 MBHeapAlloc: 136 kB HeapInuse: 401 kB TotalAlloc: 13 MBHeapAlloc: 400 kB HeapInuse: 664 kB TotalAlloc: 13 MBHeapAlloc: 663 kB HeapInuse: 926 kB TotalAlloc: 13 MBHeapAlloc: 925 kB HeapInuse: 1.2 MB TotalAlloc: 14 MBHeapAlloc: 1.2 MB HeapInuse: 1.4 MB TotalAlloc: 14 MBHeapAlloc: 1.4 MB HeapInuse: 1.7 MB TotalAlloc: 14 MB
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go