You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
go-zero/example/timingwheel/leak/leak.go

61 lines
1008 B
Go

4 years ago
package main
import (
"flag"
"fmt"
"log"
"runtime"
"strconv"
"time"
"github.com/tal-tech/go-zero/core/cmdline"
"github.com/tal-tech/go-zero/core/collection"
"github.com/tal-tech/go-zero/core/proc"
4 years ago
)
const numItems = 1000000
var round = flag.Int("r", 3, "rounds to go")
func main() {
defer proc.StartProfile().Stop()
flag.Parse()
fmt.Println(getMemUsage())
for i := 0; i < *round; i++ {
do()
}
cmdline.EnterToContinue()
}
func do() {
tw, err := collection.NewTimingWheel(time.Second, 100, execute)
if err != nil {
log.Fatal(err)
}
for i := 0; i < numItems; i++ {
key := strconv.Itoa(i)
tw.SetTimer(key, key, time.Second*5)
}
fmt.Println(getMemUsage())
}
func execute(k, v interface{}) {
}
func getMemUsage() string {
runtime.GC()
var m runtime.MemStats
runtime.ReadMemStats(&m)
// For more info, see: https://golang.org/pkg/runtime/#MemStats
return fmt.Sprintf("Heap Alloc = %dMiB", toMiB(m.HeapAlloc))
}
func toMiB(b uint64) uint64 {
return b / 1024 / 1024
}